使用dplyr对数据帧进行整形/转置
我有一个以下格式的数据框 对于给定的ID;年龄、性别和地位保持不变 我想做一些转换使用dplyr对数据帧进行整形/转置,r,dplyr,reshape,transpose,R,Dplyr,Reshape,Transpose,我有一个以下格式的数据框 对于给定的ID;年龄、性别和地位保持不变 我想做一些转换 每个“Id”和“类型”都有一行 在“Tablet”列中找到唯一值并进行转置 将“Level”列转置,并在新转置的tablet列下具有与每个tablet对应的值。空单元格必须用“NA”填充 所需的输出格式附在下面以供参考 我尝试过使用dcast和重塑;tidyr和dplyr使用聚集和扩散,但是我无法实现第三次转换 任何帮助都会很好!谢谢您可以使用tidyr软件包中的spread()功能: 设置包和数据: libr
任何帮助都会很好!谢谢您可以使用
tidyr
软件包中的spread()
功能:
设置包和数据:
library(dplyr)
library(tidyr)
df=data.frame(
id=c(1,1,1,1,1,2,2),
age=c(3,3,3,3,3,51,51),
sex=c('f','f','f','f','f','m','m'),
type=c('a','a','a','b','b','a','a'),
tablet=c('t1','t2','t3','t1','t5','t3','t10'),
level=c(1,2,3,1,4,2,3),
status=c('n','n','n','n','n','y','y')
)
使用groupby()
按id和类型获取结果
使用spread()
将数据与包含列名键的tablet
列和包含值的level
列进行转换<代码>排列()默认情况下将用NA
填充空格
使用select()
将列重新排列为所需格式:
df %>%
group_by(id,type) %>%
spread(tablet, level) %>%
select(id,age,sex,type,t1,t2,t3,t5,t10,status)
您可以在
tidyr
软件包中使用spread()
函数:
设置包和数据:
library(dplyr)
library(tidyr)
df=data.frame(
id=c(1,1,1,1,1,2,2),
age=c(3,3,3,3,3,51,51),
sex=c('f','f','f','f','f','m','m'),
type=c('a','a','a','b','b','a','a'),
tablet=c('t1','t2','t3','t1','t5','t3','t10'),
level=c(1,2,3,1,4,2,3),
status=c('n','n','n','n','n','y','y')
)
使用groupby()
按id和类型获取结果
使用spread()
将数据与包含列名键的tablet
列和包含值的level
列进行转换<代码>排列()默认情况下将用NA
填充空格
使用select()
将列重新排列为所需格式:
df %>%
group_by(id,type) %>%
spread(tablet, level) %>%
select(id,age,sex,type,t1,t2,t3,t5,t10,status)
这与你的作业不完全相同,但应该足够接近。如果没有,请考虑使用MVCE元素进行重新发布。这与你的作业不完全相同,但应该足够接近。如果没有,请考虑使用MVCE元素进行重新发布。谢谢安德鲁。代码工作得近乎完美。我希望将样本ID的所有级别都放在一行中。现在我得到了ID为“1”的4行和ID为“2”的2行。尝试合并和合并。。运气不太好。。通过执行一个切片“fill(everything(),.direction=“down”)%%>%fill(everything(),.direction=“up”)%%>%slice(1)”,最终使其工作。。不过表演并不精彩。有什么建议吗?谢谢安德鲁。代码工作得近乎完美。我希望将样本ID的所有级别都放在一行中。现在我得到了ID为“1”的4行和ID为“2”的2行。尝试合并和合并。。运气不太好。。通过执行一个切片“fill(everything(),.direction=“down”)%%>%fill(everything(),.direction=“up”)%%>%slice(1)”,最终使其工作。。不过表演并不精彩。有什么建议吗?