gpt4 book ai didi

r - 如何将非数字变量列转换为两个数字变量列?

转载 作者:行者123 更新时间:2023-12-05 08:38:34 24 4
gpt4 key购买 nike

使用 R,我需要帮助将一个非数字列转换为两个数字列。我想拆分 x 列中的非数字数据,破折号之前的值进入一列(开始),破折号之后的值进入另一列(结束)。然后,我想创建一个新的数字列,其中包含 Start 和 End 列之间的差异,并在差异中添加 1。 (Diff 列包含年份计数,因此从 2011 年到 2018 年将是八年。)

在尝试做的时候遇到了意想不到的问题。首先,x 变量显示为一个因素。其次,Start 和 End 列中的数据不是数字,当我试图将它们设为数字以便进行 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

最佳答案

df$Start = as.numeric(unlist(lapply(strsplit(df$x, "-"), `[`, 1)))
df$End = as.numeric(unlist(lapply(strsplit(df$x, "-"), `[`, 2)))
df$Diff = df$End - df$Start + 1
df
x Start End Diff
1 <NA> NA NA NA
2 1950-1960 1950 1960 11
3 1975-1986 1975 1986 12
4 2011-2018 2011 2018 8

关于r - 如何将非数字变量列转换为两个数字变量列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62414000/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com