【发布时间】:2020-08-20 04:40:34
【问题描述】:
我在数据表中有一个包含购买代码的列。如果在我的合同(每份合同 = 新行)中有一次购买,那么代码号只是一个字符类型变量(例如,11.25.64)。但是,如果我的合同有多次购买,那么代码将存储在一个列表中。它看起来像这样
dt n codes
1 11.25.64
2 c('11.25.16', '25.84.78', '78.26.99')
3 81.62.16
4 c('16.25.16', '99.84.78', '28.26.99')
为了分类,我只想提取每个代码的前两位数字。所以,我想创建一个新列并得到这样的结果:
dt n classification_codes
1 11
2 c('11', '25', '78')
3 81
4 c('16', '99', '28')
我尝试执行以下代码
dt$classification_codes<- substr(dt$codes, start = 1, stop = 2)
然而,它只适用于我有一个代码的行,但对于带有列表变量的行,它给出'c('
dt n classification_codes
1 11
2 c(
3 81
4 c(
然后我尝试使用不同的方法并做这样的事情
dt$classification_codes <- lapply(str_split(dt$codes, " "), substr, 1, 3)
但我得到以下输出。这似乎更接近我想要的,但仍然不是。当我执行代码时,好像列表中的第一个变量不可读
dt n classification_codes
1 11
2 c("c(", "\"25","\"78")
3 81
4 c("c(", "\"99", "\"28")
【问题讨论】:
-
“一次购买”和“多次购买”ID 有什么区别?是不是一个购买ID总是以11开头?如果您包含一个样本数据集并显示预期的输出应该是什么,这将非常有帮助。请参阅minimal reproducible example 以获得有用的指导。
-
感谢您的指出!我提供了一些示例输入数据和一些预期输出
-
您介意提供
dput()的示例数据(或者甚至只是您在上面复制的前四行)吗?