[英]Is there an R function to apply a vector to a column in a df, and create new columns?
[英]splitting a number(int) within a column in DF into 4 new columns R
以下是我通過導入每周摘要.csv 創建的 DF 中的一列的輸出。 這些是唯一的代碼,每個代碼的長度只能是 4 個數字,即 8400、9070 等。當生成摘要文檔時,所有代碼都聚集在一起,沒有逗號或縮進。 像下面這樣:
1 84709070
2 75508470
3 8400
3 750084009100
有沒有辦法可以將上面的內容轉換為 4 個新行,將數字從第一個 int 開始分成 4 個位置,即輸出第四行如下所示:
tariff1, tariff2, tariff3, tariff4
7500 8400 9100 none
我設法在 excel 中創建了一個令人憎惡的東西,但它在最好的時候幾乎不起作用,我更喜歡使用 R 來處理所有事情,我們每周收到大約 3 萬個這樣的條目,這將真正簡化流程!
您可以使用tidyr::separate
提及要在sep
拆分的位置。
tidyr::separate(df, V2, paste0('col', 1:4), sep = seq(4, 12, 4), convert = TRUE)
# V1 col1 col2 col3 col4
#1 1 8470 9070 NA NA
#2 2 7550 8470 NA NA
#3 3 8400 NA NA NA
#4 3 7500 8400 9100 NA
seq
生成位置序列。
seq(4, 12, 4)
#[1] 4 8 12
數據
df <- structure(list(V1 = c(1L, 2L, 3L, 3L), V2 = c(84709070, 75508470,
8400, 750084009100)), class = "data.frame", row.names = c(NA, -4L))
這是一個基本的 R 選項,它定義了一個函數f
來分割數字
f <- function(x) t(`length<-`(as.numeric(sapply(seq(1,nchar(x),by = 4), function(k) substr(x,k,k+3))),4))
dfout <- cbind(df,data.frame(Vectorize(f)(df$V2)))
以至於
V1 V2 X1 X2 X3 X4
1 1 84709070 8470 7550 8400 7500
2 2 75508470 9070 8470 NA 8400
3 3 8400 NA NA NA 9100
4 3 750084009100 NA NA NA NA
數據
> dput(df)
structure(list(V1 = c(1L, 2L, 3L, 3L), V2 = c(84709070, 75508470,
8400, 750084009100)), class = "data.frame", row.names = c(NA,
-4L))
從base R
使用strsplit
的選項
lst1 <- strsplit(as.character(df$V2), "(?<=....)", perl = TRUE)
df[paste0('col', 1:4)] <- do.call(rbind, lapply(lst1,
`length<-`, max(lengths(lst1))+1))
df <- type.convert(df, as.is = TRUE)
-輸出
df
# V1 V2 col1 col2 col3 col4
#1 1 84709070 8470 9070 NA NA
#2 2 75508470 7550 8470 NA NA
# 3 8400 8400 NA NA NA
#4 3 750084009100 7500 8400 9100 NA
或者使用來自base R
read.fwf
df[paste0('col', 1:4)] <- read.fwf(file = textConnection(as.character(df$V2)),
widths = c(4, 4, 4, 4))
df <- structure(list(V1 = c(1L, 2L, 3L, 3L), V2 = c(84709070, 75508470,
8400, 750084009100)), class = "data.frame", row.names = c(NA,
-4L))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.