Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用下划线条分隔的R中字符串中前n个数字的总和_R_Regex_Split - Fatal编程技术网

用下划线条分隔的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