选择列表中数据框的数字列

时间:2016-03-09 15:13:24

标签: r list dataframe lapply

我有一个数据框列表。应用函数后,我得到了非数字的新列。从我保存在列表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=",")
}

1 个答案:

答案 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简化建议。