将列表转换为数据框
Converting Lists into Data Frames
我正在尝试制作一个包含 3 列(和 100 行)的数据框,其中包含随机数,以便每行中的随机数加起来为 72。
我正在使用此代码生成随机数:
random_numbers <- diff(c(0, sort(sample(72, 2)), 72))
不过,由于格式原因,我无法将这些随机数“装入”数据框中。例如:
i <- 1:100
d <- data.frame(i)
d$rand <- diff(c(0, sort(sample(72, 2)), 72))
Error in `$<-.data.frame`(`*tmp*`, rand, value = c(37, 21, 14)) :
replacement has 3 rows, data has 100
我有另一个想法,至少我可以创建所有 100 个随机数:
results <- list()
for (i in 1:100) {
r_i <- diff(c(0, sort(sample(72, 2)), 72))
results[[i]] <- r_i
}
results[1]
# [[1]]
# [1] 3 19 50
results[2]
# [[1]]
# [1] 16 11 45
但我不确定如何根据这些数据创建一个包含 3 列和 100 行的数据框。
我知道如何在“经典”意义上做到这一点:
i <- 1:100
r_1 <- rnorm(5, 5, 100)
r_2 <- rnorm(5, 5, 100)
r_3 <- rnorm(5, 5, 100)
d <- data.frame(i, r_1, r_2, r_3)
d = data.frame(i, r_1, r_2, r_3)
当然,在上面的数据框中,这 3 个数字加起来肯定不会等于 72。
是否可以将我上面生成的100个随机数results
放入数据框中?
我们可以使用 replicate
并将 n
指定为 'd' 的行数,并从 matrix
输出
分配新列
d[paste0("r_", 1:3)] <- t(replicate(nrow(d),
diff(c(0, sort(sample(72, 2)), 72))))
-相等性测试
> all(rowSums(d[-1]) == 72)
[1] TRUE
我正在尝试制作一个包含 3 列(和 100 行)的数据框,其中包含随机数,以便每行中的随机数加起来为 72。
我正在使用此代码生成随机数:
random_numbers <- diff(c(0, sort(sample(72, 2)), 72))
不过,由于格式原因,我无法将这些随机数“装入”数据框中。例如:
i <- 1:100
d <- data.frame(i)
d$rand <- diff(c(0, sort(sample(72, 2)), 72))
Error in `$<-.data.frame`(`*tmp*`, rand, value = c(37, 21, 14)) :
replacement has 3 rows, data has 100
我有另一个想法,至少我可以创建所有 100 个随机数:
results <- list()
for (i in 1:100) {
r_i <- diff(c(0, sort(sample(72, 2)), 72))
results[[i]] <- r_i
}
results[1]
# [[1]]
# [1] 3 19 50
results[2]
# [[1]]
# [1] 16 11 45
但我不确定如何根据这些数据创建一个包含 3 列和 100 行的数据框。
我知道如何在“经典”意义上做到这一点:
i <- 1:100
r_1 <- rnorm(5, 5, 100)
r_2 <- rnorm(5, 5, 100)
r_3 <- rnorm(5, 5, 100)
d <- data.frame(i, r_1, r_2, r_3)
d = data.frame(i, r_1, r_2, r_3)
当然,在上面的数据框中,这 3 个数字加起来肯定不会等于 72。
是否可以将我上面生成的100个随机数results
放入数据框中?
我们可以使用 replicate
并将 n
指定为 'd' 的行数,并从 matrix
输出
d[paste0("r_", 1:3)] <- t(replicate(nrow(d),
diff(c(0, sort(sample(72, 2)), 72))))
-相等性测试
> all(rowSums(d[-1]) == 72)
[1] TRUE