【发布时间】:2020-10-06 09:16:48
【问题描述】:
使用 R,我需要帮助将一个非数字列转换为两个数字列。我想拆分 x 列中的非数字数据,破折号之前的值进入一列(开始),破折号之后的值进入另一列(结束)。然后,我想创建一个新的数字列,其中包含 Start 和 End 列之间的差异,差异中添加了 1。 (Diff 列包含年份计数,因此从 2011 年到 2018 年将是 8 年。)
我尝试这样做时遇到了意想不到的问题。首先,x 变量显示为一个因子。其次,开始和结束列中的数据不是数字,当我尝试将它们设为数字以便可以进行 Diff 计算时,我得到了一个强制错误。第三,我无法让 strsplit 工作。
我检查了 stackoverflow 解决方案是否存在类似问题,但无法找到一个对我有用的解决方案。
输入数据只是实际文件中的一小部分样本
我更喜欢使用 dplyr 的解决方案,但对其他解决方案持开放态度。
输入
dput(df)
structure(list(x = c(NA, "1950-1960", "1975-1986", "2011-2018"
)), class = "data.frame", row.names = c(NA, -4L))
输出
x Start End Diff
1950-1960 1950 1960 11
1975-1986 1975 1986 12
2011-2018 2011 2018 8
【问题讨论】:
-
我偏爱
splitstackshape。library(splitstackshape); cSplit(df, "x", "-", drop = FALSE)[, diff := x_2 - x_1 + 1][].