如何合并每个代表不同响应值的数据框列?

时间:2019-05-29 20:10:07

标签: r dplyr tidyr

我拥有人口统计调查数据,其中变量X的响应记录在3个单独的列中。 col1仅包含1,col2仅包含2,而col3包含其他所有内容。响应没有重叠,因此当响应者在同一行中为col2col3回答的“ 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 = ","))

感谢您的帮助/建议!

1 个答案:

答案 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   
相关问题