我有一个2列的数据框
userID itemID
1 101
1 103
1 107
2 102
2 103
3 104
...
我想要的输出是将文件写入result.txt
1 \ t 101,103,107
2 \ t 102,103
3 \ t 104
这里\ t表示userID和itemID之间的制表符距离。这不像表那样对齐。我更喜欢Java和Python背景,R中用于通用的低级写入命令是什么?
答案 0 :(得分:2)
你可以使用dplyr包来实现这个
library(dplyr)
df.summary <- df %.%
group_by(userId) %.%
summarise(itemId = paste(itemId, collapse = ","))
write.table(x=df.summary,file='new_file.tsv',sep='\t',row.names=F)
答案 1 :(得分:1)
有点乱,但这会解决问题,将输出写入output.txt
:
d <- read.table(text='userID itemID
1 101
1 103
1 107
2 102
2 103
3 104', header=T)
cat(sapply(split(d, d$userID), function(x)
paste(x$userID[1], paste(x$itemID, collapse=' , '), sep='\t')),
sep='\n', file='output.txt')
有关详细信息,请参阅?cat
和?paste
。
答案 2 :(得分:0)
以下是使用aggregate
的另一个基本解决方案:
> write.table(aggregate(d$itemID, list(d$userID), paste, collapse=' , '),
file='result.txt', sep='\t', col.names=FALSE, row.names=FALSE, quote=FALSE)
1 101 , 103 , 107
2 102 , 103
3 104