我有一個包含大量資料框的串列,所有資料框都有相同的列。我需要將一列分成兩列。
這是一個作業示例:
myList <- list(A = data.frame(ID = c("A:234", "A:345"),
Test = c(1, 1),
Value = 1:2),
B = data.frame(ID = c("B:5565", "B:2415", "B:65684"),
Test = c(1, 3, 5),
Value = 1:3))
這是我想得到的:
myList <- list(A = data.frame(ch = c("A", "A"),
pos = c(234,345),
Test = c(1, 1),
Value = 1:2),
B = data.frame(ch = c("B", "B", "B"),
pos=c(5565,2415,65684),
Test = c(1, 3, 5),
Value = 1:3))
我已經將 splitstackshape::cSplit 與 lappy 一起使用,但沒有成功。
uj5u.com熱心網友回復:
lapply(myList, tidyr::separate, col = "ID", into = c("ch", "pos"), sep = ":")
# $A
# ch pos Test Value
# 1 A 234 1 1
# 2 A 345 1 2
#
# $B
# ch pos Test Value
# 1 B 5565 1 1
# 2 B 2415 3 2
# 3 B 65684 5 3
uj5u.com熱心網友回復:
這是使用的管道版本map:
library(tidyverse)
myList %>%
map(~separate(., ID, c("ch", "pos"), sep = ":"))
$A
ch pos Test Value
1 A 234 1 1
2 A 345 1 2
$B
ch pos Test Value
1 B 5565 1 1
2 B 2415 3 2
3 B 65684 5 3
uj5u.com熱心網友回復:
使用基本 R 選項read.table
lapply(
myList,
function(x) {
with(
x,
cbind(
setNames(read.table(text = ID, sep = ":"), c("ch", "pos")),
x[setdiff(names(x),"ID")]
)
)
}
)
給
$A
ch pos Test Value
1 A 234 1 1
2 A 345 1 2
$B
ch pos Test Value
1 B 5565 1 1
2 B 2415 3 2
3 B 65684 5 3
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/455775.html
下一篇:提取函式內的資料框名稱以創建新列
