R在数据帧中添加字符串
我有一个不同类型字符串的数据帧。我希望复制字符串本身,并保持NA值和两位数字符串分别保持NA和两位数R在数据帧中添加字符串,r,dataframe,R,Dataframe,我有一个不同类型字符串的数据帧。我希望复制字符串本身,并保持NA值和两位数字符串分别保持NA和两位数 DF: Milk Cola Juice Coffee Tea Wine 1 A NA A BD C A 2 AB NA C D CD AD 3 A BC AC D D D 4 AB B NA
DF:
Milk Cola Juice Coffee Tea Wine
1 A NA A BD C A
2 AB NA C D CD AD
3 A BC AC D D D
4 AB B NA D CD AD
5 B C AC BD CD NA
6 AB BC C NA NA A
7 NA BC A B NA A
Desired output:
Milk Cola Juice Coffee Tea Wine
1 AA NA AA BD CC AA
2 AB NA CC DD CD AD
3 AA BC AC DD DD DD
4 AB BB NA DD CD AD
5 BB CC AC BD CD NA
6 AB BC CC NA NA AA
7 NA BC AA BB NA AA
谢谢。这里尝试使用正则表达式替换:
dat[] <- lapply(dat, function(x) sub("^(.)$", paste(rep("\\1",2),collapse=""), x) )
为了实现您的目标,我们可以使用lappy
和ifelse
DF[] <- lapply(DF, function(x) ifelse(nchar(x) == 1, paste(x, x, sep=""), x))
DF[]DF
牛奶可乐汁咖啡茶酒
1 AA AA BD CC AA
2 AB CC DD CD AD
3 AA BC AC DD DD
4 AB BB DD CD AD
5 BB CC AC BD CD
6 AB BC CC AA
公元前7年AA BB AA
我们也可以使用strep
来实现这一点,因为它是用C
DF[] <- lapply(DF, function(x) ifelse(nchar(x)==1, strrep(x,2), x))
DF
# Milk Cola Juice Coffee Tea Wine
#1 AA <NA> AA BD CC AA
#2 AB <NA> CC DD CD AD
#3 AA BC AC DD DD DD
#4 AB BB <NA> DD CD AD
#5 BB CC AC BD CD <NA>
#6 AB BC CC <NA> <NA> AA
#7 <NA> BC AA BB <NA> AA
structure(list(Milk = c("A", "AB", "A", "AB", "B", "AB", NA),
Cola = c(NA, NA, "BC", "B", "C", "BC", "BC"), Juice = c("A",
"C", "AC", NA, "AC", "C", "A"), Coffee = c("BD", "D", "D",
"D", "BD", NA, "B"), Tea = c("C", "CD", "D", "CD", "CD",
NA, NA), Wine = c("A", "AD", "D", "AD", NA, "A", "A")), .Names = c("Milk",
"Cola", "Juice", "Coffee", "Tea", "Wine"), row.names = c("1",
"2", "3", "4", "5", "6", "7"), class = "data.frame")
DF <- " Milk Cola Juice Coffee Tea Wine
1 A NA A BD C A
2 AB NA C D CD AD
3 A BC AC D D D
4 AB B NA D CD AD
5 B C AC BD CD NA
6 AB BC C NA NA A
7 NA BC A B NA A "
DF <- read.table(text=DF, stringsAsFactors=FALSE)
Milk Cola Juice Coffee Tea Wine
1 A <NA> A BD C A
2 AB <NA> C D CD AD
3 A BC AC D D D
4 AB B <NA> D CD AD
5 B C AC BD CD <NA>
6 AB BC C <NA> <NA> A
7 <NA> BC A B <NA> A
DF[] <- lapply(DF, function(x) ifelse(nchar(x) == 1, paste(x, x, sep=""), x))
> DF
Milk Cola Juice Coffee Tea Wine
1 AA <NA> AA BD CC AA
2 AB <NA> CC DD CD AD
3 AA BC AC DD DD DD
4 AB BB <NA> DD CD AD
5 BB CC AC BD CD <NA>
6 AB BC CC <NA> <NA> AA
7 <NA> BC AA BB <NA> AA
DF[] <- lapply(DF, function(x) ifelse(nchar(x)==1, strrep(x,2), x))
DF
# Milk Cola Juice Coffee Tea Wine
#1 AA <NA> AA BD CC AA
#2 AB <NA> CC DD CD AD
#3 AA BC AC DD DD DD
#4 AB BB <NA> DD CD AD
#5 BB CC AC BD CD <NA>
#6 AB BC CC <NA> <NA> AA
#7 <NA> BC AA BB <NA> AA
library(dplyr)
DF %>%
mutate_each(funs(ifelse(nchar(.)==1, strrep(., 2), .)))