在R中迭代子集和换台表
我有这个表( inputdf ):
数值 | 0 |
---|---|
1 | 0.2 |
1 | 0.3 |
1 | 0.4 |
2 | 0.2 |
0.2 2 | 0.7 |
3 | 0.1 |
,我想获得此( outputddf ):
number1 | number2 | number2 0.2 |
---|---|---|
0.2 | 0.2 | 0.1 |
0.1 0.3 | 0.7 | Na |
0.4 | Na | i i |
已通过使用第1列中的数字进行循环迭代,然后按照该数字来子集,但是我有麻烦将结果附加到输出数据框中:
inputdf <- read.table("input.txt", sep="\t", header = TRUE)
outputdf <- data.frame()
i=1
total=3 ###user has to modify it
for(i in seq(1:total)) {
cat("Collecting values for number", i, "\n")
values <- subset(input, Number == i, select=c(Value))
cbind(outputdf, NewColumn= values, )
names(outputdf)[names(outputdf) == "NewColumn"] <- paste0("Number", i)
}
任何帮助或提示都将做得很好。提前致谢!
I have this table (inputdf):
Number | Value |
---|---|
1 | 0.2 |
1 | 0.3 |
1 | 0.4 |
2 | 0.2 |
2 | 0.7 |
3 | 0.1 |
and I want to obtain this (outputdf):
Number1 | Number2 | Number3 |
---|---|---|
0.2 | 0.2 | 0.1 |
0.3 | 0.7 | NA |
0.4 | NA | NA |
I have tried it by iterating with a for loop through the numbers in column 1, then subsetting the dataframe by that number but I have troubles to append the result to an output dataframe:
inputdf <- read.table("input.txt", sep="\t", header = TRUE)
outputdf <- data.frame()
i=1
total=3 ###user has to modify it
for(i in seq(1:total)) {
cat("Collecting values for number", i, "\n")
values <- subset(input, Number == i, select=c(Value))
cbind(outputdf, NewColumn= values, )
names(outputdf)[names(outputdf) == "NewColumn"] <- paste0("Number", i)
}
Any help or hint will be very wellcomed. Thanks in advance!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在
tidyverse
中,您可以为组的每个元素创建一个ID,然后使用tidyr :: pivot_wider
:在
base> base r
中,相同的想法。创建ID
列,然后重新设计为宽:In the
tidyverse
, you can create an id for each element of the groups and then usetidyr::pivot_wider
:in
base R
, same idea. Create theid
column and then reshape to wide: