r - 在 r 中循环一个 rep() 函数

标签 r for-loop

df 是一个频率表,其中 a 中的值被报告的次数与 x,y,z 列中记录的次数一样多。我试图将频率表转换为原始数据,因此我使用了 rep() 函数。

如何循环 rep() 函数来为我提供 x、y、z 的原始数据,而不必像下面那样重复多次该函数?

此外,我可以将结果输入到数据框中吗,请记住输出将具有不同的列长度:

a <- (1:10)
x <- (6:15)
y <- (11:20)
z <- (16:25)
df <- data.frame(a,x,y,z)
df
rep(df[,1], df[,2])
rep(df[,1], df[,3])
rep(df[,1], df[,4])

最佳答案

如果您不想重复 for 循环,您总是可以尝试使用 apply 函数。请注意,您不能将其存储在 data.frame 中,因为对象的长度不同,但您可以将其存储在列表中并以与 data.frame 类似的方式访问元素。像这样的东西有效:

df2<-sapply(df[,2:4],function(x) rep(df[,1],x))

sapply 函数的意思是对 df[,2:4] 中的每一列应用 rep(df[,1],x ) 函数,其中 x 是您的列之一(df[,2]df[,3]df[,4]).

下面的代码只是确保应用函数给出与您原来的方式相同的结果。

 identical(df2$x,rep(df[,1], df[,2]))
[1] TRUE
 identical(df2$y,rep(df[,1], df[,3]))
[1] TRUE
 identical(df2$z,rep(df[,1], df[,4]))
[1] TRUE

编辑:

如果你想把它作为一个 data.frame 对象,你可以这样做:

res<-as.data.frame(sapply(df2, '[', seq(max(sapply(df2, length)))))

请注意,这会将 NA 引入到您的 data.frame 中,所以要小心!

关于r - 在 r 中循环一个 rep() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37836433/

相关文章:

r - ade4软件包-主成分分析

r - 我在 data.table 中复制行的方法有效吗?

R - 将多列的 chr 值转换为 num?

C 程序无法编译,不确定原因

c - 用 C 打印素数

r - 根据条件将列名写入变量

r - 两种颜色的背景

javascript - forEach在javascript中同时遍历两个数组

java - 使用嵌套For循环在java中显示1-99之间的所有奇数

php - 制作长度不断增加的星号和零的图案