我有一个看起来像这样的数据框:
df <- data.frame(matrix(c(1,351,NA,1,0,2,585,0,1,1,3,321,NA,0,1,4,964,NA,NA,NA,5,556,0,1,NA), ncol = 5, byrow = TRUE))
colnames(df) <- c('id','value','v1','v2','v3')
现在,对于不是全部NA的所有行,我想用0(零)替换子集c('v1', 'v2', 'v3')
中的所有NA。
所以我想要这个:
R> df
id value v1 v2 v3
1 1 351 NA 1 0
2 2 585 0 1 1
3 3 321 NA 0 1
4 4 964 NA NA NA
5 5 556 0 1 NA
最终像这样:
R> df
id value v1 v2 v3
1 1 351 0 1 0
2 2 585 0 1 1
3 3 321 0 0 1
4 4 964 NA NA NA
5 5 556 0 1 0
请注意,df[4, ]
仍具有c('v1', 'v2', 'v3')
的NA。
答案 0 :(得分:2)
在基数R中,这是一种方法
#columns to check for NA
cols <- c("v1", "v2", "v3")
#rows which needs to be replaced
rows <- which(rowSums(is.na(df[cols])) != length(cols))
#Replace values which are NA to 0
df[rows, cols] <- replace(df[rows, cols], is.na(df[rows, cols]), 0)
df
# id value v1 v2 v3
#1 1 351 0 1 0
#2 2 585 0 1 1
#3 3 321 0 0 1
#4 4 964 NA NA NA
#5 5 556 0 1 0
答案 1 :(得分:2)
这是一个具有良好旧循环的解决方案:
for (r in 1:nrow(df))
{
# check that not the all row is na but that there are some na
if(!all(is.na(df[r,3:5])) && sum(is.na(df[r,3:5]>0)))
{
df[r,which(is.na(df[r,3:5]))+2]=0
}
}
答案 2 :(得分:1)
使用<Button
id="openDrawer"
onClick={() => toggleDrawer(true)}
style={{ margin: spacing.small }}
>
<AddIcon />
{buttonText}
</Button>
,您可以尝试:
it("should open the drawer on button click", () => {
wrapper.find("#openDrawer").simulate("click");
expect(wrapper.state("drawerOpen")).toBetruthy();
});
答案 3 :(得分:1)
一个简单的dplyr
解决方案:
library(tidyverse)
df %>%
mutate_at(vars(v1:v3), ~ifelse(is.na(v1) & is.na(v2) & is.na(v3), NA, replace_na(., 0)))
答案 4 :(得分:0)
尽可能简单:
df[ !(is.na(df$v1) & is.na(df$v2) & is.na(df$v3)) & is.na(df) ] <- 0