在 R 中重新编码以间隔注释的数据
Recoding data in R that is annotated in intervals
我有一个间隔深度的数据集。
Depth
0-3
3-6
6-9
9-10
10-11
etc
前三个以 3 个单位为增量,最后五个也是 (60-63, 63-66, 66-69, 69-72, 72-75
)。
由于这种表示法,我无法用自变量绘制深度。我想将包含深度间隔的列重新编码为更高的值。即对于 0-3,它将读作 3。
如果有 3 个单位增量和奇异增量的捷径?
我试过了
df$depth <- 1:nrow(wor)
但这只给我顺序数字。
当我尝试时
df$depth <- dplyr::recode(df$depth, "1=3; 2=6; 3=9; 4:54 = 9:60; 55=63; 56=66; 57=69; 58=72; 59=75; 60=78") __________________
but I get the error -------- Warning message:
Unreplaced values treated as NA as .x is not compatible. Please specify replacements exhaustively or supply .default
如有任何帮助,我们将不胜感激。 Tack sa mycket ! (瑞典语)。
尝试使用正则表达式从这些字符串中提取最后一个数字。
sub("^[[:digit:]]{1,}-([[:digit:]]{1,})", "\1", "0-3")
[1] "3"
sub("^[[:digit:]]{1,}-([[:digit:]]{1,})", "\1", "10-11")
[1] "11"
df$depth <- as.numeric(sub("^[[:digit:]]{1,}-([[:digit:]]{1,})", "\1", df$depth))
您可以使用正则表达式来尝试解决这个问题:
dd <- data.frame(depth=c("0-3", "3-6", "6-9", "9-10", "10-11"), stringsAsFactors=FALSE)
dd$max_depth <- gsub("([0-9]+)-([0-9]+)", "\2", dd$depth)
您可以使用与 tidyr 包分开的功能
library(tidyr)
tidyr::separate(data, col_name, into = c("first_num", "second_num"), sep = "-")
然后你有两个变量(列)与间隔的每个数字,你可以用它们计算运算。
library(dplyr)
df %>%
tidyr::separate(depth_var, into = c("first_num", "second_num"), sep = "-") %>%
mutate(first_num = as.double(first_num),
second_num = as.double(second_num),
intervals = abs(first_num - second_num)))
我会使用 tidyr 包并用中间的破折号分隔数字
set.seed(1)
df <- data.frame(Depth = c("0-3", "3-6", "6-9", "9-12"),
val = sample(x=4, replace = F))
library(tidyr)
df %>%
separate(Depth, c("start", "finish_dep"), sep = "-") %>%
select(-start)
我有一个间隔深度的数据集。
Depth
0-3
3-6
6-9
9-10
10-11
etc
前三个以 3 个单位为增量,最后五个也是 (60-63, 63-66, 66-69, 69-72, 72-75
)。
由于这种表示法,我无法用自变量绘制深度。我想将包含深度间隔的列重新编码为更高的值。即对于 0-3,它将读作 3。
如果有 3 个单位增量和奇异增量的捷径?
我试过了
df$depth <- 1:nrow(wor)
但这只给我顺序数字。
当我尝试时
df$depth <- dplyr::recode(df$depth, "1=3; 2=6; 3=9; 4:54 = 9:60; 55=63; 56=66; 57=69; 58=72; 59=75; 60=78") __________________
but I get the error -------- Warning message:
Unreplaced values treated as NA as .x is not compatible. Please specify replacements exhaustively or supply .default
如有任何帮助,我们将不胜感激。 Tack sa mycket ! (瑞典语)。
尝试使用正则表达式从这些字符串中提取最后一个数字。
sub("^[[:digit:]]{1,}-([[:digit:]]{1,})", "\1", "0-3")
[1] "3"
sub("^[[:digit:]]{1,}-([[:digit:]]{1,})", "\1", "10-11")
[1] "11"
df$depth <- as.numeric(sub("^[[:digit:]]{1,}-([[:digit:]]{1,})", "\1", df$depth))
您可以使用正则表达式来尝试解决这个问题:
dd <- data.frame(depth=c("0-3", "3-6", "6-9", "9-10", "10-11"), stringsAsFactors=FALSE)
dd$max_depth <- gsub("([0-9]+)-([0-9]+)", "\2", dd$depth)
您可以使用与 tidyr 包分开的功能
library(tidyr)
tidyr::separate(data, col_name, into = c("first_num", "second_num"), sep = "-")
然后你有两个变量(列)与间隔的每个数字,你可以用它们计算运算。
library(dplyr)
df %>%
tidyr::separate(depth_var, into = c("first_num", "second_num"), sep = "-") %>%
mutate(first_num = as.double(first_num),
second_num = as.double(second_num),
intervals = abs(first_num - second_num)))
我会使用 tidyr 包并用中间的破折号分隔数字
set.seed(1)
df <- data.frame(Depth = c("0-3", "3-6", "6-9", "9-12"),
val = sample(x=4, replace = F))
library(tidyr)
df %>%
separate(Depth, c("start", "finish_dep"), sep = "-") %>%
select(-start)