2017-09-13 41 views
0

這裏是一個小例子的數據幀:創建從數據幀與長度(列表)的列表相同nrow(DF)

> dput(head(cluster_socrata_csv)) 
structure(list(Cluster = structure(c(1L, 13L, 24L, 35L, 46L, 
57L), .Label = c("cluster1", "cluster10", "cluster100", "cluster11", 
"cluster12", "cluster13", "cluster14", "cluster15", "cluster16", 
"cluster17", "cluster18", "cluster19", "cluster2", "cluster20", 
"cluster21", "cluster22", "cluster23", "cluster24", "cluster25", 
"cluster26", "cluster27", "cluster28", "cluster29", "cluster3", 
"cluster30", "cluster31", "cluster32", "cluster33", "cluster34", 
"cluster35", "cluster36", "cluster37", "cluster38", "cluster39", 
"cluster4", "cluster40", "cluster41", "cluster42", "cluster43", 
"cluster44", "cluster45", "cluster46", "cluster47", "cluster48", 
"cluster49", "cluster5", "cluster50", "cluster51", "cluster52", 
"cluster53", "cluster54", "cluster55", "cluster56", "cluster57", 
"cluster58", "cluster59", "cluster6", "cluster60", "cluster61", 
"cluster62", "cluster63", "cluster64", "cluster65", "cluster66", 
"cluster67", "cluster68", "cluster69", "cluster7", "cluster70", 
"cluster71", "cluster72", "cluster73", "cluster74", "cluster75", 
"cluster76", "cluster77", "cluster78", "cluster79", "cluster8", 
"cluster80", "cluster81", "cluster82", "cluster83", "cluster84", 
"cluster85", "cluster86", "cluster87", "cluster88", "cluster89", 
"cluster9", "cluster90", "cluster91", "cluster92", "cluster93", 
"cluster94", "cluster95", "cluster96", "cluster97", "cluster98", 
"cluster99"), class = "factor"), Socrata = structure(c(17L, 17L, 
1L, 13L, 14L, 16L), .Label = c("Assault", "Assault with Deadly Weapon", 
"Breaking and Entering", "Community Policing", "Death", "Disorder", 
"Drugs ", "Missing Person", "Other", "Other Sexual Offense", 
"Property Crime", "Property Crime Residental", "Robbery", "Theft", 
"Theft from Vehicle", "Theft of Vehicle", "Traffic", "Unknown", 
"Vehicle Recovery", "Weapons Offense"), class = "factor")), .Names = c("Cluster", 
"Socrata"), row.names = c(NA, 6L), class = "data.frame") 

看起來像這樣:

> head(cluster_socrata_csv) 
    Cluster   Socrata 
1 cluster1   Traffic 
2 cluster2   Traffic 
3 cluster3   Assault 
4 cluster4   Robbery 
5 cluster5   Theft 
6 cluster6 Theft of Vehicle 

我想創建一個列表,其中集羣是關鍵,Socrata是價值。

我試着簡單地在一個as.list()函數中嵌套,但是這返回了一個包含2個值的列表,一個用於集羣,另一個用於值。

在這種情況下,我想在這6個項目的列表,其中第一項關鍵是cluster1中,它的價值是交通。對於第六項來說,關鍵將是cluster6,它的價值是「盜竊車輛」。

回答

1

你可以這樣做:

setNames(as.list(df$Socrata),df$Cluster) 

setNames(as.list(as.character(df$Socrata)),df$Cluster) # not to return levels 
+0

謝謝,也可以,但它是返回所有級別,有沒有辦法來防止這種情況(請參閱zweps答案中的評論) –

+0

我編輯了我的答案:) –

1

我想象的那麼簡單的像這樣的東西...

B = as.list(A$Socrata) 
names(B) = A$Cluster 

其中A是你的數據框

如果你想有隻水平的一個子集,你可以嘗試

B = as.list(droplevels(A$Socrata)) 

這會給僅實際存在的水平。如果你不希望任何級別,那麼我們就必須通過從$ Socrata刪除因子類:

B = as.list(as.character(A$Socrata)) 
+0

感謝,似乎除了各個層面的工作正在被拉入。無論如何,以防止這一點? ''''> cluster_socrata_lut [1] $ cluster1 [1]交通 20關卡:攻擊與致命的武器打破和進入社區警務進攻......武器進攻''' –

+1

@DougFir看到我的編輯,他們可能會幫助你! 編輯:啊..我看到你有另一個接受的答案。所以你可以忽略我的編輯! – zwep

+0

非常感謝! –

相關問題