首页 文章

r-如果在lapply里面

提问于
浏览
0

我有一张 table :

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}}))

但是我收到一个错误:

if(str_sub(z,-2,-1)== 0){:参数的长度为零时出错

期望的结果是

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')])结构(list(dir = c(“a”,“PJE INDEPENDENCIA 96 5”),E_numdir = c(“ 1“,”96,5“),last2 = list(list(”1“),list(c(”96“,”5“)))),. Name = c(”dir“,”E_numdir“, “last2”),row.names = 1:2,class =“data.frame”)

1 回答

  • 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
    

    Edit :如果 last2 是一个列表,您可以简化代码

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

相关问题