在R中将数据框的N/A列转换为X列的独立行
解决方案
首先先构造你的原始数据框:
df <- data.frame( X = c("Proposal 1", "Proposal 2"), `Positive answers` = c(10, 15), `N/A` = c(6, 6) )
你用gather()没得到预期结果,是因为这个函数是用来把多列宽数据转成长格式的,而你的需求是把N/A列的数值提取出来,作为新的一行添加到原有数据里,不是标准的宽转长场景。下面给你两种可行的方法:
方法一:用tidyverse工具包(推荐)
library(tidyverse) # 提取原有数据的前两列,再添加N/A对应的行 result <- df %>% select(X, `Positive answers`) %>% add_row(X = "N/A", `Positive answers` = df$`N/A`[1])
如果N/A列的数值可能不一致,你想保留所有不同的数值行,可以改成:
result <- df %>% select(X, `Positive answers`) %>% bind_rows( df %>% distinct(`N/A`) %>% rename(X = `N/A`, `Positive answers` = `N/A`) %>% mutate(X = as.character(X)) )
方法二:Base R原生方法
不用额外装包,直接用基础函数实现:
# 提取主数据部分 df_main <- df[, c("X", "Positive answers")] # 构造N/A对应的行 df_na <- data.frame(X = "N/A", `Positive answers` = df$`N/A`[1]) # 合并数据框 result <- rbind(df_main, df_na)
运行后就能得到你想要的目标数据框:
> result X Positive answers 1 Proposal 1 10 2 Proposal 2 15 3 N/A 6
内容的提问来源于stack exchange,提问作者ACD
相关产品推荐
相关产品推荐

