R中字符串中的前n个数字之和,下划线分隔

时间:2018-07-31 08:49:48

标签: 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")
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)

我想从此数据中提取到主要活动的总距离。这意味着我想总结直到工作或受教育为止的旅行距离。 因此,在我们的示例中,结果应为:

Travel_survey$distance_primact <- c(0.17, 12.2, 7.9)

我设法做的是分割距离字符串并求和。但是,我想告诉该函数只对前n个值求和,而n等于primary_act。

sapply(strsplit(as.character(Travel_survey$distance), "_"),
       function(x) sum(as.numeric(x), na.rm=TRUE))

有人知道如何执行此操作吗?我将非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您在这里:

Span

请注意:

您当然可以从这些原始数据中减去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 。这个步骤在您的问题中仍然不清楚。

primary_act