r - 拆分列中的字符串并作为新行插入
问题描述
尽管我看到了类似的问题和解决方案,但我仍然无法解决我的问题。我想将 data.table 中的元素拆分为单个值并插入新行。
数据是这样的:
dt <- data.table("0100"=c("9103,9048,9903,7837","8738,2942,2857,4053"),
"0101"=c("9103,9048,9903","2537,1983"))
我希望它是这样的:
dt2 <- data.table("0010" = c(9103,9048,9903,7837,8738,2942,2857,4053),
"0101" = c(9103,9048,9903,2537,1983,NA,NA,NA))
由于我刚开始学习R,请帮我解决这个问题
解决方案
library(data.table)
使用lapply()
我们可以使用自定义函数处理每一列。这个函数首先应用strsplit()
,将每一列变成一个包含两个元素的列表。通过应用
unlist()
,我们将列表转换为向量(长度不等)。
dt_l <- lapply(dt, \(x) strsplit(x, ",") |> unlist())
dt_l
#> $`0100`
#> [1] "9103" "9048" "9903" "7837" "8738" "2942" "2857" "4053"
#>
#> $`0101`
#> [1] "9103" "9048" "9903" "2537" "1983"
通过将第二列的长度设置为 的最大长度dt_l
,第二列用NA
s “填充”。
length(dt_l$`0101`) <- max(lengths(dt_l))
dt_l
#> $`0100`
#> [1] "9103" "9048" "9903" "7837" "8738" "2942" "2857" "4053"
#>
#> $`0101`
#> [1] "9103" "9048" "9903" "2537" "1983" NA NA NA
现在我们可以把它全部变成一个data.table
了。
as.data.table(dt_l)
#> 0100 0101
#> 1: 9103 9103
#> 2: 9048 9048
#> 3: 9903 9903
#> 4: 7837 2537
#> 5: 8738 1983
#> 6: 2942 <NA>
#> 7: 2857 <NA>
#> 8: 4053 <NA>
推荐阅读
- c# - 我想知道 Xamarin 表单是否支持 watchOS 应用程序?
- vb.net - Simulate partially pressed keys in VB.net
- python - 如何修复“TypeError:printSong() 缺少 1 个必需的位置参数:'self'”
- sql - Apache Ignite 中的简单 SELECT(*) 查询非常慢
- java - How to apply Aero-Snap to an borderless Stage
- html - 有没有办法让导航栏标志响应?
- javascript - $.each 重复 10 两次
- c# - 在db中的gridview中插入复选框的选中值不起作用
- java - 使用什么 mvn 插件可以帮助为属性设置动态值?
- mysql - Create new column which value is the subtraction of 2 columns on different tables