2017-10-29 96 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

感謝這些例子,他們都在處理我的數據集。 –

相關問題