访问R数据框中的单个元素有时会返回一个List吗?

时间:2017-10-29 04:49:48

标签: r dataframe

我已经知道我是否使用as.character(df[x,y])as.<whatever>df[x,y]我可以每次从数据框中获取/强制我需要的东西

我似乎无法找到/弄清楚原因。详情如下。

当我访问df[1,1](或第1列中的任何内容)时,我得到了

df[1,1]
[1] a
Levels: a b c

但是当我访问1,3时它工作正常

> df[1,3]
[1] 10

但是当我使用as.character()时,它可以工作。

> as.character(df[1,1])
[1] "a"

使用此行构建数据框

df = data.frame(names = c("a","b","c"), size = c(1,2,3),num = c(10,20,30) )
> df
      names size num
    1     a    1  10
    2     b    2  20
    3     c    3  30

但是在这个数据框中

imp2met = read.csv('tomet.csv', header = TRUE, sep=",",dec='.')
> imp2met
      unit   mult    ret
1     (yd)  0.9100    (m)
2     (in)  2.5200   (cm)
3 .....

我得到1,3

的这些结果
> imp2met[1,3]
[1] (m)
Levels: (c) (cm) (cm^2) ....
>
> as.character(imp2met[1,3])
[1] "(m)"

为什么&#34;随机&#34;结果如何?为什么我需要as.<whatever>()但只有部分时间?

1 个答案:

答案 0 :(得分:1)

data.frame默认是将字符向量转换为因子。您可以使用参数stringsAsFactors=FALSE

更改此设置

此外,使用[对数据框进行子集化时,可以添加drop=FALSE参数以在某些情况下简化结果。