我是R的初学者,花了几个小时试图解决问题。
我会“解除”数据集中变量的值,从而获得行中的单个观察值。我认为最好用一个例子来解释。
我会从:
Variable 1 Variable 2 Count
GROUP1 A 3
GROUP1 B 2
GROUP2 A 2
GROUP2 B 4
为:
Variable 1 Variable 2 Count
GROUP1 A 1
GROUP1 A 1
GROUP1 A 1
GROUP1 B 1
GROUP1 B 1
GROUP2 A 1
GROUP2 A 1
GROUP2 B 1
GROUP2 B 1
GROUP2 B 1
GROUP2 B 1
我想也许我可以使用apply来解决这个问题,但我尝试过使用融合,使用strsplit,xtabs ...但是我没有得到结果。
非常感谢您提前问候。
答案 0 :(得分:3)
使用@bgoldst数据集
您可以按count
变量
编辑正如Marat在评论中所建议的那样(感觉有点安全)
y <- x[rep(1:nrow(x), x$count), ]
而不是
y <- x[rep(row.names(x), x$count), ]
然后将count
设置为一个
y$count <- 1
答案 1 :(得分:3)
使用splitstackshape
library(splitstackshape)
expandRows(setDT(df1), 'Count', drop=FALSE)[,Count:=1][]
# Variable 1 Variable 2 Count
#1: GROUP1 A 1
#2: GROUP1 A 1
#3: GROUP1 A 1
#4: GROUP1 B 1
#5: GROUP1 B 1
#6: GROUP2 A 1
#7: GROUP2 A 1
#8: GROUP2 B 1
#9: GROUP2 B 1
#10: GROUP2 B 1
#11: GROUP2 B 1
df1 <- structure(list(`Variable 1` = c("GROUP1", "GROUP1", "GROUP2",
"GROUP2"), `Variable 2` = c("A", "B", "A", "B"), Count = c(3L,
2L, 2L, 4L)), .Names = c("Variable 1", "Variable 2", "Count"),
class = "data.frame", row.names = c(NA, -4L))
答案 2 :(得分:2)
这是一个解决方案:
r> x <- data.frame(v1=c('GROUP1','GROUP1','GROUP2','GROUP2'), v2=c('A','B','A','B'), count=c(3,2,2,4) );
r> x;
v1 v2 count
1 GROUP1 A 3
2 GROUP1 B 2
3 GROUP2 A 2
4 GROUP2 B 4
r> y <- cbind(do.call(rbind, lapply(1:nrow(x), function(r) do.call(rbind, replicate(x[r,'count'], x[r,names(x)[names(x)!='count']], simplify=F ) ) ) ), count=1 );
r> rownames(y) <- 1:nrow(y);
r> y;
v1 v2 count
1 GROUP1 A 1
2 GROUP1 A 1
3 GROUP1 A 1
4 GROUP1 B 1
5 GROUP1 B 1
6 GROUP2 A 1
7 GROUP2 A 1
8 GROUP2 B 1
9 GROUP2 B 1
10 GROUP2 B 1
11 GROUP2 B 1