当变量同时包含范围和一个数字时,需要帮助将数字范围转换为R中的平均值

时间:2019-05-14 07:48:56

标签: r string

我正在处理非结构化数据,并希望使其成为一种类型的数据。 我有一列同时包含范围和数字

x <- c("0-7", "8", "12-15", "16", "20-23", "24-27", "28")

,并且只想获取范围观测值的平均值,而其他人则保持不变

# "3.5" "8" "13.5" "16" "21.5" "25.5" "28"

它尝试了以下代码:

data$column = mean(range(lapply(strsplit(as.character(unique(data$column)),"-"), as.numeric)))

但是我不断收到错误消息

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

这是一个解决方案:

s <- c("0-7", "8", "12-15", "16", "20-23", "24-27", "28")
sapply(strsplit(s, split = "-", fixed = TRUE), function(k) mean(as.numeric(k)))

然后您可以使用as.character转换回字符

感谢@nicola和@David Arenburg

答案 1 :(得分:0)

尝试通过eval进行此操作。确保其他人对此有更好的经验,很高兴获得一些有用的信息。

sapply(parse(, , gsub("(\\d+)\\-+(\\d+)", "mean(\\1:\\2)", x)), eval)
# [1]  3.5  8.0 13.5 16.0 21.5 25.5 28.0