r - 将列中以冒号分隔的字符串拆分为 R 中的不同列
问题描述
data <- data.frame(col1 = c('0/1:60,4:0.044:4:0:1.00:2352,160:32:28', '0/1:58,4:0.041:4:0:1.00:2304,150:28:30', '0/1:25,2:0.095:1:1:0.500:908,78:9:16'))
data
col1
1 0/1:60,4:0.044:4:0:1.00:2352,160:32:28
2 0/1:58,4:0.041:4:0:1.00:2304,150:28:30
3 1/1:25,2:0.095:1:1:0.500:908,78:9:16
我想提取第二个冒号之前的数字,即0/1
, 0/1
, 1/1
, 60,4
, 58,4
, 25,2
, 并将其拆分为不同的列。
data
col1 col2 col3 col4 col5
1 0/1:60,4:0.044:4:0:1.00:2352,160:32:28 0 1 60 4
2 0/1:58,4:0.041:4:0:1.00:2304,150:28:30 0 1 58 4
3 1/1:25,2:0.095:1:1:0.500:908,78:9:16 1 1 25 2
解决方案
strsplit
两次(一次使用:
,再次使用[/,]
)和[
-extraction 的工作方式如下:
tmp <- do.call(rbind.data.frame, lapply(strsplit(data$col1, ":"), function(st) as.integer(unlist(strsplit(st, "[/,]")[1:2]))))
cbind(data, setNames(tmp, paste0("col", 1+seq_len(ncol(tmp)))))
# col1 col2 col3 col4 col5
# 1 0/1:60,4:0.044:4:0:1.00:2352,160:32:28 0 1 60 4
# 2 0/1:58,4:0.041:4:0:1.00:2304,150:28:30 0 1 58 4
# 3 0/1:25,2:0.095:1:1:0.500:908,78:9:16 0 1 25 2
推荐阅读
- excel - 根据条件从列表中删除重复项
- dart - Flutter:测试是否抛出了特定的异常
- javascript - 显示带条件的引导警报(Vue.js):如何访问此变量以更改其值?
- java - 如何设置 EditText 线的粗细?
- json - 如何在嵌套的json中找到最小值的键?
- react-native-navigation - 如何使用 react-native-siri-shortcut 设置 react-native-navigation(rootView 问题)
- ms-access - 无法为具有多个条件的 DCount 获取正确的语法
- r - 创建包含总计 100 行的数据框
- python-3.x - Cloud Functions - OpenCV Videocapture 读取方法对于来自云存储的较大文件失败
- python - 子列表,将多位字符串转换为单个整数列表