我正在尝试对多个数据帧执行简单的for循环,并将输出(从所有数据帧)保存到一个列表中。
以下是示例数据:
# Two example data frames (variables x and y)
a <- data.frame(x=rnorm(1:100, 10, 1), y=1:100)
b <- data.frame(x=rnorm(1:100, 500, 50), y=1:100)
# Merging data frames to a list, which we aim to loop through
data_frame_list <- list(a, b)
# Desired list
new_list <- list()
# The loop
# I want two simple values from each data frame (value1 and value2)
for(i in data_frame_list) {
for(j in 1:5) {
value1 = i[j,1]
value2 = i[j,2]
new_list[i] <- cbind(value1, value2)
}
}
因此,从每个数据帧,我想要所有 j 值(1到5)的value1和value2。我想将所有提取的数据放在一个列表中(new_list)。
感谢您的帮助
答案 0 :(得分:2)
其他答案很有帮助,但我想尝试帮助您修复for循环。
for(i in 1:length(data_frame_list)) {
for(j in 1:5) {
value1 = data_frame_list[[i]][j,1]
value2 = data_frame_list[[i]][j,2]
new_list[[5*(i-1)+j]] = c(value1, value2)
}
}
与您的代码存在一些差异:
希望这会有所帮助。
答案 1 :(得分:1)
您是否尝试选择前5列数据框a和b?
如果是这样,试试这个:
new_list <- cbind(a[, 1:5], b[, 1:5])
答案 2 :(得分:1)
如果我正确读出了您的问题,那么您正试图从列表data_frame_list
的每个元素中获取前5行数据(包括列)。如果是这样,那么这可能会有所帮助:
for(i in data_frame_list) {
new_list <- i[1:5, ]}
它提供了一个新列表,其中只包含第一个列表中每个元素的前5行(包括列)。该列表要变大,它应该包含每个新列表的前五个元素。
希望它有所帮助!