R 如何在同一函数中使用ifelse/lag/mutate替换值和字?
我有类似的数据R 如何在同一函数中使用ifelse/lag/mutate替换值和字?,r,dataframe,dplyr,tidyverse,R,Dataframe,Dplyr,Tidyverse,我有类似的数据 v1 <- c("Fail", 20, 30, "Out", NA, 32, 33, 10) v2 <- c(10, NA, NA, "Out", "Fail", 34, 35, 30) df <- data.frame(v1,v2) 来自na.locf动物园的解决方案 来自na.locf动物园的解决方案 您可以使用tidyverse: library(tidyverse) df%>% replace(array(grepl("\\D",as.ma
v1 <- c("Fail", 20, 30, "Out", NA, 32, 33, 10)
v2 <- c(10, NA, NA, "Out", "Fail", 34, 35, 30)
df <- data.frame(v1,v2)
来自na.locf动物园的解决方案
来自na.locf动物园的解决方案
您可以使用tidyverse:
library(tidyverse)
df%>%
replace(array(grepl("\\D",as.matrix(df)),dim(df)),NA)%>%
mutate_all(~as.numeric(as.character(.x)))%>%
fill(v1:v2,.direction ="down")%>%
fill(v1:v2,.direction = "up")
v1 v2
1 20 10
2 20 10
3 30 10
4 30 10
5 30 10
6 32 34
7 33 35
8 10 30
您可以使用tidyverse:
library(tidyverse)
df%>%
replace(array(grepl("\\D",as.matrix(df)),dim(df)),NA)%>%
mutate_all(~as.numeric(as.character(.x)))%>%
fill(v1:v2,.direction ="down")%>%
fill(v1:v2,.direction = "up")
v1 v2
1 20 10
2 20 10
3 30 10
4 30 10
5 30 10
6 32 34
7 33 35
8 10 30
这里有一个填充选项
这里有一个填充选项
首先使用read.table(给出df0)将非数字字符串转换为NA,然后使用NA.approx。这给出了一个矩阵。如果需要数据帧,请在结果上使用as.data.frame
library(zoo)
df0 <- read.table(text = paste(df$v1, df$v2), na.strings = c("NA", "Out", "Fail"))
na.approx(df0, method = "constant", rule = 2)
如果需要,我们可以使用magrittr这样表示:
library(matrittr)
library(zoo)
df %$%
paste(v1, v2) %>%
read.table(text = ., na.strings = c("NA", "Out", "Fail")) %>%
na.approx(method = "constant", rule = 2)
首先使用read.table(给出df0)将非数字字符串转换为NA,然后使用NA.approx。这给出了一个矩阵。如果需要数据帧,请在结果上使用as.data.frame
library(zoo)
df0 <- read.table(text = paste(df$v1, df$v2), na.strings = c("NA", "Out", "Fail"))
na.approx(df0, method = "constant", rule = 2)
如果需要,我们可以使用magrittr这样表示:
library(matrittr)
library(zoo)
df %$%
paste(v1, v2) %>%
read.table(text = ., na.strings = c("NA", "Out", "Fail")) %>%
na.approx(method = "constant", rule = 2)
为什么NA的v1[5]变成了32而不是30?对不起,我编辑了。可能是@MikeH的重复。这似乎是,但它不是100%相同。即使在这里,也出现了好的和新的答案。甚至在df上也有文字。为什么v1[5]即NA变为32而不是30?对不起,我编辑了。可能是@MikeH的重复。这似乎是,但它不是100%相同。即使在这里,也出现了好的和新的答案。甚至在df上也有文字。
library(matrittr)
library(zoo)
df %$%
paste(v1, v2) %>%
read.table(text = ., na.strings = c("NA", "Out", "Fail")) %>%
na.approx(method = "constant", rule = 2)