gpt4 book ai didi

r - 计算字符串中出现在 R 字符串中特定位置的单词

转载 作者:行者123 更新时间:2023-12-02 02:55:11 25 4
gpt4 key购买 nike

我的数据帧 df 中有一个字符串变量 tours ,它表示一个人在旅途中所做的不同停留。

例如:
1. 家庭_工作_休闲_家
2. home_work_shopping_work_home
3. home_work_leisure_errand_home

在交通规划中,我们将主要事件(工作和教育)和次要事件(其他一切)分组。我想计算第一次主要事件之前的次要事件的数量,在每次旅行的最后一次主要事件之后的两个主要事件之间。

这意味着我正在寻找 R 中的函数:
一种。标识字符串变量中的第一个作品,
b.然后统计第一次工作事件之前的事件数
C。如果有多于一个,则识别字符串中的最后一个作品
d.如果有则统计两次工作事件之间的事件次数,
e.然后统计上次工作事件后的事件数

三个示例游览的结果将是:

  1. 第一次小学前的事件数量:1(家庭)
    第一个和最后一个主要之间的事件数:0
    最后一次小学后的事件数量:2(休闲和家庭)
    主要事件数量:1(工作)
  2. 第一次小学前的事件数量:1(家庭)
    第一个和最后一个小学之间的事件数量:1(购物)
    上次小学后的事件数量:1(家庭)
    主要事件数量:2(工作)
  3. 第一次小学前的事件数量:1(家庭)
    第一个和最后一个主要之间的事件数:0
    最后一次小学后的事件数量:3(休闲、差事和家庭)
    主要事件数量:1(工作)

如果有人可以帮助我解决这个问题,我将非常感激 - 即使它是指向类似问题的链接。

加油。亲切的问候娜塔莉

最佳答案

这应该可以帮助您入门;你可以用任何你想要的替换“工作”和“教育”:

> x
[1] "home_work_leisure_home" "home_work_shopping_work_home" "home_work_leisure_errand_home"
> strsplit(x,"_")
[[1]]
[1] "home" "work" "leisure" "home"

[[2]]
[1] "home" "work" "shopping" "work" "home"

[[3]]
[1] "home" "work" "leisure" "errand" "home"

ad_last_p<-bet_f_l_p<-be_first_p<-prim_n<-numeric()

for(i in 1:length(x)){
y<-sort(c(which(x[[i]]=="education"),which(x[[i]]=="work"))) ### In each of the examples, find which ones are Primary.
prim_n[i]<-length(y) ### Number of Primary activities
be_first_p[i]<-ifelse(y[1]>1,y[1]-1,0) ### Number before First Primary
bet_f_l_p[i]<-ifelse(length(y)>1,sum(diff(y))-length(y)+1,0) ### Between Primary 1 and 2.
ad_last_p[i]<-length(x[[i]])-y[length(y)] ### Number after last primary
}

> z<-cbind(be_first_p,bet_f_l_p,af_last_p,prim_n)
> z
be_first_p bet_f_l_p af_last_p prim_n
[1,] 1 0 2 1
[2,] 1 1 1 2
[3,] 1 0 3 1

希望您想要像这样简单的东西? :) 如果您需要任何说明,请告诉我!

######## 编辑 1 ########

我用包含 10,000 个示例的列表进行了尝试,大约用了 0.5 秒。好像还可以O(n) 最差。如果事件不包含任何工作或教育,您可以在循环的第二行添加:

if(length(y)==0){next}.

这将确保代码在没有主记录时有效,并且这些情况的输出将为“NA”。您可以使用以下方法摆脱那些愚蠢的 NA 结果:

z<-z%>%na.omit

关于r - 计算字符串中出现在 R 字符串中特定位置的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49857698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com