随机化或排列 data.frame 中的值

标签 r

我有一个如下所示的 data.frame:(我的真实数据框更大):

df <- data.frame(A=c("a","b","c","d","e","f","g","h","i"), 
               B=c("1","1","1","2","2","2","3","3","3"), 
               C=c(0.1,0.2,0.4,0.1,0.5,0.7,0.1,0.2,0.5))

> df
  A B   C 
1 a 1 0.1 
2 b 1 0.2 
3 c 1 0.4 
4 d 2 0.1 
5 e 2 0.5 
6 f 2 0.7 
7 g 3 0.1 
8 h 3 0.2 
9 i 3 0.5 

我想添加几个 n 列(类似于排列),其中 D 列将是来自 df$C 的随机值,但该值只能是从那些值为 df$B 的行中选取,所需输出的示例如下:

df <- data.frame(A=c("a","b","c","d","e","f","g","h","i"), 
               B=c("1","1","1","2","2","2","3","3","3"), 
               C=c(0.1,0.2,0.4,0.1,0.5,0.7,0.1,0.2,0.5),
               D=c(0.2,0.2,0.1,0.5,0.7,0.1,0.5,0.5,0.2))

> df
  A B   C   D
1 a 1 0.1 0.2
2 b 1 0.2 0.2
3 c 1 0.4 0.1
4 d 2 0.1 0.5
5 e 2 0.5 0.7
6 f 2 0.7 0.1
7 g 3 0.1 0.5
8 h 3 0.2 0.5
9 i 3 0.5 0.2

我尝试过使用 plyr 包,但我的方法无法正常工作:

ddply(df, levels(.(B)), transform, D=sample(C))

我还考虑过根据df$B拆分数据帧,然后使用函数lapply在每个数据帧中添加列,但是我不知道如何选择 df$B 的级别,

非常感谢

最佳答案

不需要plyrave就可以了。

transform(df, D=ave(C, B, FUN=function(b) sample(b, replace=TRUE)))

关于随机化或排列 data.frame 中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17218892/

相关文章:

r - 我可以使用 dplyr 对每组不同的大小进行子采样吗?

r - 如何在 R 中排列嵌套数据(即带父项的数据)?

r - 在 pkgdown 引用 yaml 中包含 "All other functions"

返回 data.table 中某一列中的列表

r - Snakemake:执行 R 脚本时忽略 Rprofile

r - 使用 R 中列之间的成对计算创建矩阵

r - 方程组。如何拆分字符串以在 R 中获得两个矩阵 A 和 b

在 R 中 reshape 数据框的列

r - 字符串作为公式

R:将数据框中的所有列相乘