我有一个数据框列表。应用函数后,我得到了非数字的新列。从我保存在列表modified_list
中的每个结果数据框中,我希望保存修改后的数据帧,但我只想保存包含数值的列。
我选择了数字列。我不知道如何在数据帧列表中选择数字列。我的代码看起来像这样。请问您能做些什么来使这段代码有效?
library(plyr)
library(VIM)
data1 <- sleep
data2 <- sleep
data3 <- sleep
# get a list of dataframes
list_dataframes <- list(data1, data2, data3) # list of dataframes
n <- length(list_dataframes)
# apply function to the list_dataframes
modified_list <- llply(list_dataframes, myfunction)
# selects only numeric results
nums <- llply(modified_list, is.numeric)
# saving results
for (i in 1:n){
write.table(file = sprintf( "myfile/%s_hd.txt", dataframes[i]), modified_list[[i]][, nums], row.names = F, sep=",")
}
答案 0 :(得分:5)
听起来您希望将data.frames列表中的每个data.frame分配到其数字列。
您可以测试名为df
的data.frame的哪些列是
sapply(df, is.numeric)
这将返回一个逻辑向量,可用于对data.frame进行子集化,如下所示:
df[sapply(df, is.numeric)]
返回该data.frame的数字列。要在data.frames df_list
列表上执行此操作,并返回子集化data.frames列表:
lapply(df_list, function(df) df[sapply(df, is.numeric)])
编辑:感谢@Richard Scriven简化建议。