我有一个数据框,其中两个变量(Lat和Lon)的值不正确。数据框中的错误值列出为999.00,正确的值应分别为42.68和-72.47。
我想使用dplyr替换这些值的简单方法,但是我的尝试(请参见下文)未成功(下面提供了错误)。
df$Lat2 <- recode(df$Lat, "999.00"="42.68", .default=x)
lapply(x,f)中的错误:找不到对象'x'
df <- df %>%
mutate(Lat2 = if_else(Lat == 999.00, 42.68, NULL, NULL))
mutate_impl(.data,点)中的错误: 评估错误:未使用的参数(recvLat = 999)。
df <- df %>%
mutate(Lat2 = ifelse(Lat == 999.00, 42.68, NULL))
mutate_impl(.data,点)中的错误: 评估错误:替换的长度为零。 另外:警告消息: 在rep(no,length.out = length(ans))中: 'x'为NULL,因此结果为NULL
df <- df %>%
mutate(Lat2 = case_when(Lat == 999.00 ~ 42.68, TRUE ~ NULL))
mutate_impl(.data,点)中的错误: 评估错误:下标超出范围。
对于后三种尝试,如果数字用引号引起来(例如“ 999.00”和“ 42.68”),我将得到相同的错误
答案 0 :(得分:2)
为什么不使用它。
data=as.data.frame(matrix(0,3,3))
names(data)=c("a","b","c")
data$a[1]=999
data$c[2]=999
data$a[which(data$a==999)]=42.68
data$c[which(data$c==999)]=-72.47
data
a b c
1 42.68 0 0.00
2 0.00 0 -72.47
3 0.00 0 0.00
答案 1 :(得分:1)
实际上,这也是展示this.state = {
type: getTypeName(props.defaultValue), // no assertion here
value: this.props.defaultValue
}
的优雅之处。
data.table
缺点是您必须记住library(data.table)
## Create example
data <- data.table(lat = c(999, 0, 0),
lon = c(0, 999, 0))
## Reassign values
data[lat==999, lat := 42.68]
data[lon==999, lon := -72.47]
## Print results
data
# lat lon
# 1: 42.68 0.00
# 2: 0.00 -72.47
# 3: 0.00 0.00
是分配所必需的。
上行是
:=
语法更加简单和一致(i,j,分组依据)答案 2 :(得分:0)
我们可以将NULL
放在list
df %>%
mutate(Lat2 = ifelse(recvLat == 999.00, 42.68, list(NULL)))
# recvLat Lat2
#1 999.0 42.68
#2 1.5 NULL
#3 2.5 NULL
它可以是NULL
而不是NA
df %>%
mutate(Lat2 = ifelse(recvLat == 999.00, 42.68, NA_real_))
# recvLat Lat2
#1 999.0 42.68
#2 1.5 NA
#3 2.5 NA
如果我们想做相反的事情,只需使用!=
df %>%
mutate(Lat2 = ifelse(recvLat != 999.00, 42.68, NA_real_))
基于OP的评论,
df %>%
mutate(Lat2 = ifelse(recvLat == 999.00, 42.68, recvLat))
在base R
中,我们可以通过创建索引来实现
i1 <- df$recvLat == 999
df$recLat[i1] <- 42.68
注意:两种解决方案均有效。
df <- data.frame(recvLat = c(999, 1.5, 2.5))