2017-10-29 51 views
-1

我已经想通了,如果我使用as.character(df[x,y])as.<whatever>df[x,y]我能得到/强迫我需要什么,从我的数据每天的时间框架访问R数据框中的单个元素有时会返回一个List?

我似乎无法找到/弄清楚就是为什么。下面的细节。


当我访问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)" 

那么为什么“随机”结果呢?为什么我需要as.<whatever>(),但只有部分时间?

+2

您使用'as。当你在不同类型之间进行转换时,你需要使用'​​'。在你的情况下,你正在将因素转换为字符。看起来你对R中的因素数据类型知之甚少。 – Suren

+0

是的,我所经历的教程没有提及因素。我看了他们,谢谢! –

回答

1

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

而且改变这种情况,当你使用子集一个[数据框,您可以添加drop=FALSE参数来简化在某些情况下的结果。

+1

'df = data.frame(names = c(“a”,“b”,“c”),size = c(1,2,3),num = c(10,20,30),stringsAsFactors = FALSE )' – vaettchen

+0

感谢这些例子,他们都在处理我的数据集。 –

相关问题