我正在处理非结构化数据,并希望使其成为一种类型的数据。 我有一列同时包含范围和数字
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)))
但是我不断收到错误消息
感谢您的帮助!
答案 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