df <- data.frame(var1 = c('a', 'b', 'c'), var2 = c('d', 'e', 'f'),
freq = 1:3)
Run Code Online (Sandbox Code Playgroud)
扩展上面data.frame的前两列的最简单方法是什么,以便每行显示"freq"列中指定的次数?
换句话说,从这里开始:
df
var1 var2 freq
1 a d 1
2 b e 2
3 c f 3
Run Code Online (Sandbox Code Playgroud)
对此:
df.expanded
var1 var2
1 a d
2 b e
3 b e
4 c f
5 c f
6 c f
Run Code Online (Sandbox Code Playgroud) 我想每次都重复data.frame的行N.结果应该是一个新的data.frame(with nrow(new.df) == nrow(old.df) * N)保持列的数据类型.
N = 2的示例:
A B C
A B C 1 j i 100
1 j i 100 --> 2 j i 100
2 K P 101 3 K P 101
4 K P 101
Run Code Online (Sandbox Code Playgroud)
因此,每行重复2次,字符仍然是字符,因素仍然是因素,数字仍然是数字,...
我的第一次尝试使用了:apply(old.df, 2, function(co) rep(co, each = N)),但是这个将我的值转换为字符,我得到:
A B C
[1,] "j" "i" "100"
[2,] "j" "i" "100"
[3,] "K" "P" "101"
[4,] "K" "P" "101"
Run Code Online (Sandbox Code Playgroud) 有很多类似的问题(例如,重复 data.frame 的每一行指定的次数,在 R 中解聚合/反向汇总/扩展数据集,在 dplyr 中重复 data.frame 的行),但是我的数据集的结构与这些问题的答案所假设的不同。
我有一个数据框,其中包含每个数据中的测量频率group以及每组每个结果的观察总数total_N:
tibble(group=c("A", "B"), total_N=c(4,5), measure_A=c(1,4), measure_B=c(2,3))
# A tibble: 2 x 4
group total_N outcome_A outcome_B
<chr> <dbl> <dbl> <dbl>
1 A 4 1 2
2 B 5 4 3
Run Code Online (Sandbox Code Playgroud)
我想对数据进行反聚合,以便数据框的行数与观察总数一样多,并且每个结果都有一个1用于所有带结果的观察值和一个0用于所有没有结果的观察值。因此最终结果应该是这样的数据框:
# A tibble: 9 x 3
group outcome_A outcome_B
<chr> <dbl> <dbl>
1 A 1 1
2 A 0 1
3 A 0 0
4 A …Run Code Online (Sandbox Code Playgroud)