尝试根据数据框中的特定行条件用 NA 替换特定列值。示例数据集(测试)和我尝试过的代码如下。请注意,我的实际数据集要大得多,但我基本上需要用 NA 替换特定行(特定年份)中的特定列。在示例中,我尝试使用列索引为 2002 年的第 3:5 列插入 NA,但结果最终将第 3:5 列中的所有值替换为 NA。我确实想使用列索引而不是列名,因为我的实际数据中有很多列。
test <- data.frame(YEAR=c(2000,2001,2002,2003,2004,2000,2001,2002,2003,2004),
zone=c('A','A','A','A','A','B','B','B','B','B'),
value=c(5,9,2,5,7,1,8,4,2,1),
value2=c(5,3,6,8,9,7,2,6,1,7),
value3=c(1,5,7,3,9,1,8,2,9,8))
ifelse(test$YEAR==2002,test[,3:5]<-NA,test[])
答案 0 :(得分:0)
@Test
fun test() = runBlockingTest {
val pagingSource = MyPagingSource()
val actual = pagingSource.load(LoadParams.Refresh(...))
assertEquals(actual as? LoadResult.Page)?.data, listOf(...))
}
演练:
碱基检出是 test[,3:5] <- lapply(test[,3:5], replace, test$YEAR == 2002, NA)
test
# YEAR zone value value2 value3
# 1 2000 A 5 5 1
# 2 2001 A 9 3 5
# 3 2002 A NA NA NA
# 4 2003 A 5 8 3
# 5 2004 A 7 9 9
# 6 2000 B 1 7 1
# 7 2001 B 8 2 8
# 8 2002 B NA NA NA
# 9 2003 B 2 1 9
# 10 2004 B 1 7 8
,如果相应年份是 2002 年,则用 replace(x, test$YEAR == 2002, NA)
替换 x
(待确定)的每个值;保留与 2002 年不对应的值;
NA
等价于
lapply(test[,3:5], replace, test$YEAR == 2002, NA)
并且正在对第 3-5 列中的每一列进行操作。对于每一列,它调用 lapply(test[,3:5], function(x) replace(x, test$YEAR == 2002, NA))
函数,并返回结果。
replace
将返回一个列表。由于我们只想替换整个框架中的几列,因此我们执行 lapply
,保留其余的列。
附注:
这也可以用 test[,3:5] <-
完成,看起来像:
ifelse
在这种定义非常明确的情况下,我倾向于使用 lapply(test[,3:5], function(x) ifelse(test$YEAR == 2002, NA, x))
而不是 replace
。为什么? (1) ifelse
更小更快。 (2) replace
在定义列时存在许多问题,例如 ifelse
。 (3) class
当使用不正确的时候会默默地强制事物,它可以在没有警告或错误的情况下返回不同的类。虽然这可能是可取的,但它可能不是预期的,而且它是沉默。了解 ifelse(TRUE,Sys.time(),Sys.time())
如何始终返回 ifelse
向量,这可能不是我们想要的。
无论如何,我从未见过 ifelse(c(T,F), c(pi,pi), c("hello","hello"))
的一个实例在调用中进行赋值是有意义的。也就是说,这些(对我来说)都没有意义:
character
答案 1 :(得分:0)
只是为了提供一个 tidyverse 解决方案:
test %>%
mutate(across(contains("value"), ~if_else(YEAR == 2002, NA_real_, .)))
或
test %>%
mutate(across(contains("value"), ~replace(., YEAR == 2002, NA)))
给予
# YEAR zone value value2 value3
# 1 2000 A 5 5 1
# 2 2001 A 9 3 5
# 3 2002 A NA NA NA
# 4 2003 A 5 8 3
# 5 2004 A 7 9 9
# 6 2000 B 1 7 1
# 7 2001 B 8 2 8
# 8 2002 B NA NA NA
# 9 2003 B 2 1 9
# 10 2004 B 1 7 8