【问题标题】:Reading the class of each variable in a DF based on a DF list of variables in R根据 R 中的变量 DF 列表读取 DF 中每个变量的类
【发布时间】:2016-05-05 17:37:08
【问题描述】:

令人困惑的标题,抱歉,我正在尝试打印出包含在另一个 DF 中的 DF 中每个变量的类列表。

DF1=50个不同类型的变量(Variable1、Variable2等)

DF2=15 个变量的列表(一列中的变量 1 名称、变量 2 名称、变量 3 名称等)

如何根据DF2中的名称输出DF1中变量的类?

我认为这样做可以:

class(DF1[,DF2[1,]])

但它不起作用。

DF2[1,] 打印出正确的名称,然后说它有 18 个级别,列出了 DF2 中的所有其他名称……我想错了吗?

目标是查看 DF1 中的所有列(如果它们是因子变量)并将因子的水平放入 varmap。 DF2 将具有 DF1 的数据类型

编辑:更多代码

vartype=matrix(0,nrow=nrow(DF2),ncol=1)
for (i in 1:nrow(DF2))
{
  temp=class(DF1[,DF2[i,]])
  if (temp=="Factor")
  { 
    DF2[i]=1;       
  }
}

varmap=list();
length(varmap)=nrow(DF2);
for (i in 1:nrow(DF2))
{
  if (DF2[i]=="factor")
  {
    varmap[[i]]=unique(DF1[,DF2[i]])
  }
}

一些数据:

DF1 <- data.frame(
  X = sample(1:10),
  Y = sample(c("yes", "no"), 10, replace = TRUE)
)

str(Data)
DF2=as.data.frame(c("X","Y"))

【问题讨论】:

  • 尝试sapply(DF1[as.character(DF2[,1])], class) 假设DF2 的第一列包含所有列名(基于OP 的描述etc in one column)。但是,从代码来看,它看起来像是来自第一行。如果是这样的话,sapply(DF1[as.character(unlist(DF2[1,]))], class)
  • 一个简单的reproducible example 将使测试可能的解决方案变得更加容易。
  • 添加了更多代码和数据

标签: r


【解决方案1】:

我认为你想要的是以下内容:

sapply(DF1[, DF2[,1]], class)

它的作用是首先将 DF1 子集包含在 DF2 中命名的那些列,然后将“类”函数映射到每一列,sapply 使其返回一个向量。要获取数据集中每一列的类,您需要使用映射函数,如 lapply 或 for 循环。例如lapply(mtcars, class 为您提供每列的类。

【讨论】:

    猜你喜欢
    • 2021-03-11
    • 2023-02-24
    • 2021-02-27
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    相关资源
    最近更新 更多