我有一些看起来像这样的数据:
ID Married Age Visits 1 1 0 35 0 2 2 1 0 7 3 3 0 29 19
df <- data.frame(
ID = c(1L, 2L, 3L),
Married = c(0L, 1L, 0L),
Age = c(35L, 0L, 29L),
Visits = c(0L, 7L, 19L)
)
想象一下,对于此数据,Married
是一个虚拟变量,但是Age
和Visits
绝对不应为0。我想知道如何做两件事:
Age
和Visits
列中替换NA替换0值?Age
和Visits
列中替换-999为0值?这个只是出于好奇,因为我想知道如何在不使用na_if()
的情况下做到这一点。此代码不太正确,因为它还会更改“已婚”列。
df <- na_if(df, 0)
给予:
ID Married Age Visits 1 1 NA 35 NA 2 2 1 NA 7 3 3 NA 29 19
而我想要的是(1):
ID Married Age Visits 1 1 0 35 NA 2 2 1 NA 7 3 3 0 29 19
和(2):
ID Married Age Visits 1 1 0 35 -999 2 2 1 -999 7 3 3 0 29 19
我尝试过类似的事情:
df <- na_if(c(df$Age, df$Visits), 0))
但这是不对的。
答案 0 :(得分:3)
你可以做
解决方案1)
library(dplyr)
cols <- c("Age", "Visits")
df[cols] <- na_if(df[cols], 0)
df
# ID Married Age Visits
#1 1 0 35 NA
#2 2 1 NA 7
#3 3 0 29 19
解决方案2)
df[cols][df[cols] == 0] <- -999
df
# ID Married Age Visits
#1 1 0 35 -999
#2 2 1 -999 7
#3 3 0 29 19
类似于解决方案2),您也可以按照以下方式进行解决方案1)
df[cols][df[cols] == 0] <- NA
答案 1 :(得分:2)
这是解决您问题的好方法。
$('.weekdays').timePicker({
startTime: "08:00",
endTime: "22:00",
show24Hours: false,
step: 30
});
答案 2 :(得分:1)
您可能想尝试
df$Age[is.na(df$Age)] <- 0
df$Age[df$Age == -999] <- 0