【问题标题】:Extracting a specific type columns and specific named columns from a data frame-R从数据框中提取特定类型的列和特定的命名列-R
【发布时间】:2016-05-11 19:01:37
【问题描述】:

让我有一个数据框,其中一些列是因子类型,并且有一个名为“索引”的列,它不是一列。我要提取列

  • 是因子类型和
  • “索引”列。

例如让

df<-data.frame(a=runif(10),b=as.factor(sample(10)),index=as.numeri(1:10))

所以 df 是:

         a  b index
0.16187501  5     1
0.75214741  8     2
0.08741729  3     3
0.58871514  2     4
0.18464752  9     5
0.98392420  1     6
0.73771960 10     7
0.97141474  6     8
0.15768011  7     9
0.10171931  4    10

期望的输出是(让它成为一个名为df1的数据框)

df1:

   b index
   5     1
   8     2
   3     3
   2     4
   9     5
   1     6
  10     7
   6     8
   7     9
   4    10

其中包括因子列和名为“索引”的列。

我用这样的代码

  vars<-apply(df,2,function(x) {(is.factor(x)) || (names(x)=="index")})

  df1<-df[,vars]

但是,此代码不起作用。如何使用 R 中的应用类型函数返回 df1?我会很高兴得到任何帮助。非常感谢。

【问题讨论】:

    标签: r dataframe apply


    【解决方案1】:

    你可以这样做:

    df[ , sapply(df, is.factor) | grepl("index", names(df))]
    

    我认为您的方法有两个问题:首先,apply 将数据框转换为矩阵,该矩阵不将值存储为因子(有关此内容的更多信息,请参阅here)。此外,在矩阵中,每个值都必须具有相同的模式(字符、数字等)。在这种情况下,一切都会被强制转换为角色,因此找不到任何因素。

    其次,在apply (AFAIK) 中无法访问列名,因此names(x) 返回NULLnames(x)=="index" 返回logical(0)

    【讨论】:

    • 非常感谢您的时间和详细的解释。这对我来说是非常有用的。再次感谢。
    猜你喜欢
    • 2021-10-08
    • 2012-04-22
    • 2017-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多