我想將列A複製到列B,但對於列A的某些行,我想在複製到列B時進行一次stringsplit更改。我可以在不使用for循環的情況下執行此操作(即,我可以執行此操作嗎這在dplyr中使用mutate)?如何有條件地將列A的行復制到R中的列B?
我想拆就 ':'(如果找到),並採取strsplit的第二個元素,並把它放在B.
樣品結果:
A B
1 a a
2 b b
3 c:d d
我想將列A複製到列B,但對於列A的某些行,我想在複製到列B時進行一次stringsplit更改。我可以在不使用for循環的情況下執行此操作(即,我可以執行此操作嗎這在dplyr中使用mutate)?如何有條件地將列A的行復制到R中的列B?
我想拆就 ':'(如果找到),並採取strsplit的第二個元素,並把它放在B.
樣品結果:
A B
1 a a
2 b b
3 c:d d
也許:
dfrm$B[grepl("[:]", dfrm$A)] <-
sapply(strsplit(as.character(dfrm$A)[grepl("[:]", dfrm$A)], split="[:]"), "[", 2)
翻譯成英文,說只替換其中A有一個「:」的B項目,並且當同一行中的那些A項目在正則表達式字符類中被分割時形成的列表的第二項包含只有「:」字符。
此誠實並不需要大槍一樣dplyr
,大家平分列A和拍攝效果的最後一個元素
DF = read.table(text="A B
a a
b b
c:d d",header=TRUE,stringsAsFactors=FALSE)
DF$NewCol=do.call(rbind,lapply(DF[,"A"],function(x) { z=unlist(strsplit(x,":")); z[length(z)] }))
DF
# A B NewCol
# a a a
# b b b
#c:d d d
你可以使用一個lapply
功能:
DF = read.table(text="A B
a a
b b
c:d d",header=TRUE,stringsAsFactors=FALSE)
DF$NewCol<-do.call(rbind,lapply(strsplit(DF [,'A'],split=":"), function(x) tail(x,1)))
DF
A B NewCol
1 a a a
2 b b b
3 c:d d d
難打簡單正則表達式在這裏:
df$B = sub('.*:', '', df$A)
我們可以使用str_extract
library(stringr)
df1$B <- str_extract(df1$A, "\\w$")
df1$B
#[1] "a" "b" "d"
你當然可以做任何你想要的而沒有循環。如果您可以提供一些示例數據以說明您正在處理的內容,您將應用於A來識別將被拆分的行的規則以及示例期望的輸出將會很有幫助。 –
嘗試'dput(your_data)'並將結果粘貼到您的問題中。 –
做了一些編輯 - 道歉。讓我知道你是否需要更多的澄清。 –