用下划线条分隔的R中字符串中前n个数字的总和
我目前正在处理一项旅游调查的数据。巡更信息以奇数字符串格式提供:用下划线条分隔的R中字符串中前n个数字的总和,r,regex,split,R,Regex,Split,我目前正在处理一项旅游调查的数据。巡更信息以奇数字符串格式提供: tours <- c("Home_work_service_leisure_business_leisure_Home", "Home_service_work_Home", "Home_leisure_shopping_leisure_education_Home") distance <- c("0_1.7_0.5_2.4_0.8_1.8_0", "0_5.2_7_0", "0_2.8_3_0.2_1.9_0")
tours <- c("Home_work_service_leisure_business_leisure_Home", "Home_service_work_Home", "Home_leisure_shopping_leisure_education_Home")
distance <- c("0_1.7_0.5_2.4_0.8_1.8_0", "0_5.2_7_0", "0_2.8_3_0.2_1.9_0")
primary_act <- c(1, 2, 4)
# "home" is not considered an activity and thus it is activity zero.
Travel_survey <- data.frame(tours, distance , primary_act)
有人知道怎么做吗?我将非常感谢您的帮助。给您:
library(magrittr)
touri<-Travel_survey$tours %>% as.character %>% strsplit(.,"_")
disti<-Travel_survey$distance %>% as.character %>% strsplit(.,"_") %>% lapply(.,as.numeric)
touri<-lapply(touri,function(x) { 1:grep(pattern="(?i)work|education",x) })
mapply(function(d,nums){sum(d[nums],na.rm=F)},d=disti,nums=touri)
#[1] 1.7 12.2 7.9
不清楚您是如何获得距离的。你能举个例子吗?第一行的“0.17”是多少?第一行应该是0+1.7=1.7。。。对吗?这是正确的第一个是0+1.7谢谢你的帮助。然而,我无法通过grep识别旅游,因为有这样的旅游:
“家庭、工作、服务、休闲、教育、休闲、家庭”
如果工作或教育是主要活动,则取决于某个人的具体要求。这就是为什么必须通过primary_-act
“当然要从这些原始数据中减去primary_-act
”来识别主要活动的原因。如何操作?通过使用-
运算符。
sapply(strsplit(as.character(Travel_survey$distance), "_"),
function(x) sum(as.numeric(x), na.rm=TRUE))
library(magrittr)
touri<-Travel_survey$tours %>% as.character %>% strsplit(.,"_")
disti<-Travel_survey$distance %>% as.character %>% strsplit(.,"_") %>% lapply(.,as.numeric)
touri<-lapply(touri,function(x) { 1:grep(pattern="(?i)work|education",x) })
mapply(function(d,nums){sum(d[nums],na.rm=F)},d=disti,nums=touri)
#[1] 1.7 12.2 7.9
Travel_survey$distance_primact <- mapply(function(d,nums){sum(d[nums],na.rm=F)},d=disti,nums=touri) - primary_act