首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在R中对按间隔注释的数据进行重新编码

在R中对按间隔注释的数据进行重新编码
EN

Stack Overflow用户
提问于 2017-07-14 18:55:38
回答 4查看 316关注 0票数 0

我有一个数据集,每隔一段时间有深度。

代码语言:javascript
运行
复制
Depth

0-3 

3-6

6-9

9-10

10-11

etc

前三个是三个单位增量,也是最后五个(60-63, 63-66, 66-69, 69-72, 72-75)。

由于这种表示法,我无法用i因变量绘制深度。我希望将包含深度间隔的列重新编码到更高的值中。如为0-3,则为3.

如果有一条捷径可以用3单位增量和奇异增量来实现这一点呢?

我试过了

代码语言:javascript
运行
复制
df$depth <- 1:nrow(wor)

但这只给了我顺序的数字。

当我试着

代码语言:javascript
运行
复制
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

任何帮助都将不胜感激。泰克·萨·梅科特!(瑞典文)。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-07-14 19:04:07

您可以使用与tidyr包分开的函数。

代码语言:javascript
运行
复制
library(tidyr)
tidyr::separate(data, col_name, into = c("first_num", "second_num"), sep = "-")

然后,您有两个变量(列)和每个间隔数,您可以用它们计算操作。

代码语言:javascript
运行
复制
 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)))
票数 1
EN

Stack Overflow用户

发布于 2017-07-14 19:01:13

尝试使用正则表达式从这些字符串中提取最后一个数字。

代码语言:javascript
运行
复制
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))
票数 2
EN

Stack Overflow用户

发布于 2017-07-14 19:02:34

您可以使用正则表达式来解决这个问题:

代码语言:javascript
运行
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45109929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档