我的手指交叉了,你们中的一个(或多个)好人将能够为您提供帮助...
例如,假设我在R中有以下df。
ID <- as.factor (c(1:6))
Pop <- as.factor(c(1,0,1,0,0,0))
Jazz <- as.factor(c(1,0,0,1,1,0))
Classical <- as.factor(c(0,0,1,0,0,0))
Rap <- as.factor(c(1,1,1,0,1,0))
df <- data.frame(ID, Pop, Jazz, Classical, Rap)
我基本上想创建以下内容...
ID <- as.factor (c(1:6))
Pop <- as.factor(c(1,0,1,0,0,0))
Jazz <- as.factor(c(1,0,0,1,1,0))
Classical <- as.factor(c(0,0,1,0,0,0))
Rap <- as.factor(c(1,1,1,0,1,0))
Music_1 <- c("Pop","Rap","Pop","Jazz","Jazz",NA)
Music_2 <- c("Jazz",NA,"Classical",NA,"Rap",NA)
Music_3 <- c("Rap",NA,"Rap",NA,NA,NA)
df2 <- data.frame(ID, Pop, Jazz, Classical, Rap, Music_1, Music_2, Music_3)
,其中会检查每个ID的音乐偏好,然后将这些选择(使用相应列的标题)打印到带有连续编号标题(例如Music_1,Music_2,Music_3 ...)的新列中。
我尝试了几种方法来完成此任务,但是成功有限。实际的数据框更大,超过70列,因此我一直在尝试使用for
循环,但很高兴提出其他建议。
如果不清楚,请告知我。预先感谢。
答案 0 :(得分:0)
我们采用gather
到'long'格式,filter
在'val'为0的行中,按'ID'分组,创建一个序列列('ind'),{ {1}}为“宽”格式,然后通过“ ID”与原始数据结合(即使未指定,默认情况下也会选择要连接的公共列)
spread