我拥有人口统计调查数据,其中变量X
的响应记录在3个单独的列中。 col1
仅包含1,col2
仅包含2,而col3
包含其他所有内容。响应没有重叠,因此当响应者在同一行中为col2
和col3
回答的“ 1”单元格为空时。我想合并所有3列(有3000多个响应,因此手动进行操作是不可能的)。我应该注意,此数据框中有100多个列,我也需要在其他变量上使用它。
我尝试gather()
和apply()
命令时运气不佳。
(请参阅此问题以供参考:r collapsing data from multiple columns into one)
apply命令将EVERY列组合在一起,所以我猜我只需要修复我的参数?不确定如何执行此操作(这里有点新手)。
df$New <- apply(df, 1, function(x) paste(x, collapse = ","))
感谢您的帮助/建议!
答案 0 :(得分:0)
您可以使用gather() %>% summarise(paste(..., collapse = ", "))
吗?我使用的是您上面链接的示例。
library(tidyverse)
df <-
tibble(
id = 1:4,
variable_1 = c('Var1', NA, NA,'Var1'),
variable_2 = c('Var2', 'No', NA, NA),
variable_3 = c(NA, NA, 'Var3', NA),
variable_4 = c(NA, 'Var4', NA, NA),
variable_5 = c(NA, 'No', 'Var5', NA),
variable_6 = c(NA, NA, 'Var6', NA)
)
df %>%
# pivot everything besides id
gather(var, response, -id) %>%
# optional
filter(!is.na(response)) %>%
# the method
group_by(id) %>%
summarise(sentence = paste(response, collapse = ", ")) %>%
ungroup()
# id sentence
# 1 Var1, Var2
# 2 No, Var4, No
# 3 Var3, Var5, Var6
# 4 Var1