2016-11-21 70 views
-4

我有以下数据,我希望在R中重塑为期望的输出(所需输出1和2),因此我需要根据原始值解析变量名称到添加的列中输入数据中有多列。使用列名称重塑R中的数据

附加的是截图。

感谢您的任何帮助。

data from input to desired outputs

+0

尝试'cbidn(DF1 [1],OUTPUT =申请(DF1 [-1],函数(X)的toString(X [X = 0])))' – akrun

+0

@akrun,我不确定你打算在这里。我无法让你的代码工作。如果你的意思是'lapply'或'apply'(如果'apply'你错过了'MARGIN'的参数),我不清楚,并且我无法获得所需的输出,并且这些选项有任何明显的排列。 (也,你拼错'cbind') – Benjamin

+0

我有一些错别字,你说得对。我的意思是'cbind(DF [1],OUTPUT = apply(DF [-1],1,FUN = function(x)toString(names(x)[x!= 0])))' – akrun

回答

3

使用dplyrtidyr

DF <- data.frame(ID = 1:3, 
       A = c(0, 1, 1), 
       B = c(1, 0, 0), 
       C = c(0, 0, 0), 
       D = c(1, 0, 1), 
       E = c(0, 1, 0)) 
library(dplyr) 
library(tidyr) 

out1 <- 
    gather(DF, letter, bit, A:E) %>% 
    filter(bit == 1) %>% 
    arrange(ID, letter) 

out2 <- 
    out1 %>% 
    group_by(ID) %>% 
    summarise(output = paste0(letter, collapse = ",")) 
+0

感谢您的帮助。它的作用像魅力 – skw1990