r- 如果在 lapply 内
r- if inside lapply
我有一个 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,如果它们是 00,则存储 1 的列表;如果它们不在每一行中,则存储 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 函数计算每一行的每个元素并将其存储在同一行中?
版本:
table的结构:
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")
尝试
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))
我有一个 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,如果它们是 00,则存储 1 的列表;如果它们不在每一行中,则存储 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 函数计算每一行的每个元素并将其存储在同一行中?
版本: table的结构:
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")
尝试
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))