获取R中数据框的特定元素的值

时间:2015-06-03 23:16:32

标签: r vector dataframe r-factor

我有一个非常简单的代码,我不明白为什么不以我想要的方式工作。基本上,我有一个数据框,想要捕获数据框中列的第n个元素的值,并将其存储在向量中。这是我的代码:

COL1_VALUES <- c("ABC","XYZ","PQR")
COL2_VALUES <- c("DEF","JKL","TSM")

means <- data.frame(COL1_VALUES,COL2_VALUES)

for (i in 1:nrow(means)) {
    COL1_VALUES[i] <- means$COL1[i];
    COL2_VALUES[i] <- means$COL2[i];
}

print(means$COL1)
print(COL1_VALUES)

输出:

[1] ABC XYZ PQR
Levels: ABC PQR XYZ
[1] "1" "3" "2"

为什么我没有在向量COL1_VALUES中获得ABC XYZ TSM?看起来1,3,3是ABC XYZ TSM的指数,意思是$ COL1。在向量COL1_VALUES中获取ABC XYZ TSM需要什么?

感谢。

1 个答案:

答案 0 :(得分:1)

在R中,data.frame()功能的默认设置为stringsAsFactors=TRUE。这意味着所有输入字符向量都被隐式转换为所谓的&#34;因子&#34;在创建data.frame时。

factor 有点像带有整数的向量+描述这些整数的文本标签。例如,如果列gender的类型为factor,则它实际上是一个带有12 s的整数向量以及一个类别为{{1}的附加字典}表示1,类别ID Male表示2,反之亦然。

Female上的此默认设置是偷偷摸摸的野兽,可以显示在许多意外的位置。在大多数情况下,只需添加一个显式的stringsAsFactors选项,以便将字符向量保持为字符向量。

下面我列出了我个人努力的功能,直到意识到我所缺少的是stringsAsFactors=FALSE选项:

  • stringsAsFactors=FALSE
  • data.frameread.csv和其他read.table函数
  • read.*

在上面的具体示例中,您需要做的是找到以下行:

expand.grid

并将其替换为:

means <- data.frame(COL1_VALUES,COL2_VALUES)

这样您明确要求means <- data.frame(COL1_VALUES,COL2_VALUES, stringsAsFactors=FALSE) 不要在背后进行任何隐式转换。

您还可以通过在每个R会话开始时更改全局选项来避免此转换:

data.frame()

但是,请注意,修改此全局选项只会影响您的计算机,代码的代码段可能会停止在其他计算机上运行。

answer包含有关如何永久禁用它的更多信息。