2015-01-26 53 views
0

我有一個表,如:R-如果裏面lapply

         dir E_numdir  last2 
1           a   1   1 
2 PJE INDEPENDENCIA 96 5       96, 5  96, 5 
3 PJE INDEPENDENCIA 96 5       96, 5  96, 5 
4 B 34 VIVIENDA RECRE 53 00     34, 53, 00 34, 53, 00 
5 SARMIENTO CASA DE GO 613       613   13 
6 ROCA 958 00 o         958, 00  58, 00 

我需要每一行的每個元素評估,如果他們是00店的1清單,如果他們是00或0,如果他們不在每一行中。

我想:

d$last1<-lapply(d$E_numdir, 
       function(w) lapply(strsplit(w,","), 
            function(z) { 
            if(str_sub(z, -2, -1)==00){1} 
            else {0}})) 

但我得到一個錯誤:

Error in if (str_sub(z, -2, -1) == 0) { : argument is of length zero

期望的結果將是

         dir E_numdir  last2  xx 
1           a   1   1 0 
2 PJE INDEPENDENCIA 96 5       96, 5  96, 5 0,0 
3 PJE INDEPENDENCIA 96 5       96, 5  96, 5 0,0 
4 B 34 VIVIENDA RECRE 53 00     34, 53, 00 34, 53, 00 0,0,1 
5 SARMIENTO CASA DE GO 613       613   13 0 
6 ROCA 958 00 o         958, 00  58, 00 1,0 

如何與IF函數評價各行的元素並將其存儲在同一行中?

版:表 結構:

dput(d[1:2,c('dir', 'E_numdir', 'last2')]) structure(list(dir = c("a", "PJE INDEPENDENCIA 96 5 " ), E_numdir = c("1", "96, 5"), last2 = list(list("1"), list(c("96", " 5")))), .Names = c("dir", "E_numdir", "last2"), row.names = 1:2, class = "data.frame")

回答

1

嘗試

df$xx <- sapply(df$last2, function(x) toString((stri_split_fixed(x, ", ")[[1]] == "00") + 0)) 
df 
#       dir E_numdir  last2  xx 
# 1       a   1   1  0 
# 2  PJE INDEPENDENCIA 96 5  96, 5  96, 5 0, 0 
# 3  PJE INDEPENDENCIA 96 5  96, 5  96, 5 0, 0 
# 4 B 34 VIVIENDA RECRE 53 00 34, 53, 00 34, 53, 00 0, 0, 1 
# 5 SARMIENTO CASA DE GO 613  613   13  0 
# 6    ROCA 958 00 o 958, 00  58, 00 0, 1 

編輯: 如果last2是一個列表,您可以簡化代碼,只是

df$xx <- sapply(df$last2, function(x) toString((unlist(x) == "00") + 0)) 
+0

謝謝,但給我一個錯誤,因爲類(d $ last2 [2])是一個列表。 – GabyLP 2015-01-27 13:43:16

+0

你應該爲你的數據集提供一個'dput'然後 – 2015-01-27 13:44:04

+0

請看 – GabyLP 2015-01-27 14:11:40