SAS中非常简单的问题,在R(初学者)中对我来说不是那么清楚。
ID <- c('001','002','003')
name1 <- c('ZZ: John','YY: Pete','UU: Judy')
name2 <- c('55: Smith','78: Philips','99: Cortes')
name3 <- c('BB: Jr.','CC: Mr.','56: Dr.')
customer.data <- data.frame(ID, name1, name2, name3)
我想从每个变量中删除前4个字符(包括空格),输出如下所示:
ID name1 name2 name3
001 John Smith Jr.
002 Pete Philips Mr.
003 Judy Cortes Dr.
....我需要在一长串变量上做这个(不仅仅是3,就像我的例子中一样)。 相同的子串函数一遍又一遍,然后重写数据帧,如图所示。
我可以在SAS中轻松完成这项工作(我的遗产计划/试图摆脱)
ARRAY FIRSTSTUFF (3) name1 name2 name3;
ARRAY OUTPUTSTUFF (3) name1 name2 name3;
do i=1 to 3;
FORMAT OUTPUTSTUFF(i) $10.;
OUTPUTSTUFF(i)=substring(FIRSTSTUFF(i),5,10);
end;
我对R的方法感到困惑。任何帮助表示赞赏。
答案 0 :(得分:2)
我们使用customer.data[,-1]
循环遍历'customer.data'列除了第一个(lapply
),使用{{1}从第5个字符提取子字符串到字符串的最后一个字符},并将输出分配回数据集的相应列。
substr
或者在上文中,如果您使用的是 customer.data[,-1] <- lapply(customer.data[,-1],
function(x) substr(x,5,nchar(as.character(x))))
customer.data
# ID name1 name2 name3
#1 001 John Smith Jr.
#2 002 Pete Philips Mr.
#3 003 Judy Cortes Dr.
而不是stop
,则不必指定substring
(正如@Richard Scriven在评论中所示)
substr
或者您可以使用 customer.data[,-1] <- lapply(customer.data[-1], substring, 5)
来匹配字符(gsub
- 0个或更多字符)从开头到.*
后跟空格:
,并替换它以+
作为''
循环的每个列的第二个参数。
lapply