如何一起使用 lapply 和 ifelse 但在 R 中的 df 中保留原始值
How to use lapply and ifelse together but keep original values in the df in R
我有一个带有数字间隔的 df,我想用 'BETWEEN' 和 'AND' 将数字分开(稍后在 sqldf 中使用)
t <- data.frame('id'=c(1:5), 'values'=c("1-1000", ">12", "2-2000", "<100", "5-10"), 'more values' =c(">50", "<10", "500-2000", "1-10", ">100") )
我将 lapply 函数与 ifelse 一起使用,它可以工作,但是,在 table 的其余部分,所有值不包含“-”的单元格现在都替换为单个数字,例如“1”或“2”。我希望保留原始值(例如 >12。<100 等)。
#with grepl
t[] <- lapply(t, function(x) ifelse(grepl('-', x), paste('BETWEEN', sub("\-.*", "", x), 'AND', sub('.*-', '', x) ), x))
#with %like%
t[] <- lapply(t, function(x) if(x %like% '-') {paste('BETWEEN', sub("\-.*", "", x), 'AND', sub('.*-', '', x))})
我也试过用if no else函数,但是没有解决问题
t[] <- lapply(t, function(x) if(grepl('-', x)) {paste('BETWEEN', sub("\-.*", "", x), 'AND', sub('.*-', '', x))})
期望的输出:
t1 <- data.frame('id'=c(1:5), 'values'=c("BETWEEN 1 AND 1000", ">12", "BETWEEN 2 AND 2000", "<100", "BETWEEN 5 AND 10"), 'more values' =c(">50", "<10", "BETWEEN 500 AND 2000", "BETWEEN 1 AND 10", ">100") )
提前致谢!
您可以将 ifelse
与 grepl
和 sub
一起使用:
t[-1] <- lapply(t[-1], function(x)
ifelse(grepl('-', x), paste0('BETWEEN ', sub('-', ' AND ', x)), x))
t
# id values more.values
#1 1 BETWEEN 1 AND 1000 >50
#2 2 >12 <10
#3 3 BETWEEN 2 AND 2000 BETWEEN 500 AND 2000
#4 4 <100 BETWEEN 1 AND 10
#5 5 BETWEEN 5 AND 10 >100
我们使用 grepl
识别其中包含 "-"
的字符串并添加 "BETWEEN "
并将 "-"
替换为 " AND "
。我们保持其他字符串不变。
我有一个带有数字间隔的 df,我想用 'BETWEEN' 和 'AND' 将数字分开(稍后在 sqldf 中使用)
t <- data.frame('id'=c(1:5), 'values'=c("1-1000", ">12", "2-2000", "<100", "5-10"), 'more values' =c(">50", "<10", "500-2000", "1-10", ">100") )
我将 lapply 函数与 ifelse 一起使用,它可以工作,但是,在 table 的其余部分,所有值不包含“-”的单元格现在都替换为单个数字,例如“1”或“2”。我希望保留原始值(例如 >12。<100 等)。
#with grepl
t[] <- lapply(t, function(x) ifelse(grepl('-', x), paste('BETWEEN', sub("\-.*", "", x), 'AND', sub('.*-', '', x) ), x))
#with %like%
t[] <- lapply(t, function(x) if(x %like% '-') {paste('BETWEEN', sub("\-.*", "", x), 'AND', sub('.*-', '', x))})
我也试过用if no else函数,但是没有解决问题
t[] <- lapply(t, function(x) if(grepl('-', x)) {paste('BETWEEN', sub("\-.*", "", x), 'AND', sub('.*-', '', x))})
期望的输出:
t1 <- data.frame('id'=c(1:5), 'values'=c("BETWEEN 1 AND 1000", ">12", "BETWEEN 2 AND 2000", "<100", "BETWEEN 5 AND 10"), 'more values' =c(">50", "<10", "BETWEEN 500 AND 2000", "BETWEEN 1 AND 10", ">100") )
提前致谢!
您可以将 ifelse
与 grepl
和 sub
一起使用:
t[-1] <- lapply(t[-1], function(x)
ifelse(grepl('-', x), paste0('BETWEEN ', sub('-', ' AND ', x)), x))
t
# id values more.values
#1 1 BETWEEN 1 AND 1000 >50
#2 2 >12 <10
#3 3 BETWEEN 2 AND 2000 BETWEEN 500 AND 2000
#4 4 <100 BETWEEN 1 AND 10
#5 5 BETWEEN 5 AND 10 >100
我们使用 grepl
识别其中包含 "-"
的字符串并添加 "BETWEEN "
并将 "-"
替换为 " AND "
。我们保持其他字符串不变。