我是一个新手在应用功能和提前感谢的帮助。我有一个数据集(df),我只需要清理x列中的一个行子集--有连字符的行将被清理。我在df中包含了列x_clean,因为这是我希望从清理列中得到的结果。如果x列的任何值中有连字符,我将在连字符前面的字符串中填充0,直到它有5位数字,并在连字符后面的字符串中填充0,直到它有4位数字。如果字符串中没有连字符,那么我将设置为NA。这是我尝试过的,但还没有成功:
df=data.frame(x=c("55555555","4444-444","NULL","hello","0065440006123","22-111"))%>%
mutate(nchar=nchar(x),
detect=str_detect(x,"-"),
xlcean=c(NA,"04444-0444",NA,NA,NA,"00022-0111"))
df%>%mutate(xclean=sapply(strsplit(x,"-"), function(x)
{ifelse(detect==T,
paste(sprintf("%05d",as.numeric(x[1])), sprintf("%04d",as.numeric(x[2])), sep="-"),NA)}))
我也试过这个:
df%>%mutate(x_clean=
if (detect==T) {sapply(strsplit(x,"-"), function(x)paste(sprintf("%05d",as.numeric(x[1])), sprintf("%04d",as.numeric(x[2])), sep="-"))}
else {NA})
4条答案
按热度按时间yk9xbfzb1#
使用
dplyr
,不使用sapply
的方法只有
sapply
j13ufse22#
enxuqcxy3#
这里有另一个解决方案:
nwwlzxa74#
也可以使用
gsubfn
: