首页 > 解决方案 > 如何在R中检测和组合向量中的元素?

问题描述

我有一个包含许多元素的数据列表,其中我只需要列“interval..s”(回合持续时间)和“ActivityCode”(0 到 5),参见图片(datalist)。我尝试从“interval..s”列中提取“ActivityCode”列中的所有 0 和 5 以及它们的相应值。
我已经编写了一个代码来提取具有活动代码 0 和 5 的回合持续时间(从列'interval..s'),但是当 0 和 5 是两个连续回合时,回合持续时间应该相加

setwd("/Users/lucp9693/Desktop/csvfolder")
mydir = "csvfolder"
myfiles = list.files(path = mydir, pattern = ".csv",full.names = TRUE)
setwd("/Users/lucp9693/Desktop/csvfolder")
list.files(pattern = ".csv$")
list.filenames = list.files(pattern = ".csv$")
list.data = list()
ind = 0
result = vector("numeric",length(list.filenames))
for(i in 1:length(list.filenames))
{
  ind = ind +1
  list.data[[i]] = read.csv(list.filenames[i])
  document = read.csv(list.filenames[i],header = TRUE, sep = ",")
  W = document$Interval..s.[bestand$ActivityCode..0.sedentary.1.standing.2.stepping.2.1.cycling.3.1.primary.lying..3.2.secondary.lying.4.non.wear.5.travelling.==0]

有没有可能做到这一点?谢谢!

标签: rsumelement

解决方案


这是我对您的问题的阅读(带有一些示例数据):

library(dplyr)
library(tidyr)
library(tibble)

data <- tibble(
  Interval = round(runif(n = 100, min = 1, max = 1000), 1),
  ActivityCode = round(runif(n = 100, min = 0, max = 5),0)
)

data <- data %>%
  filter(ActivityCode == 0 | ActivityCode == 5) %>%
  mutate(sum = ifelse(ActivityCode == lag(ActivityCode, 1),Interval + lag(Interval, 1), Interval))

我删除了除 ActivityCode 为 0 和 5 的行之外的所有行。如果相邻或连续出现 0 或 5,则将两个相邻的间隔相加。有了这个输出:

> print.data.frame(data)
   Interval ActivityCode    sum
1      87.1            0     NA
2      38.7            0  125.8
3     843.1            5  843.1
4     680.6            5 1523.7
5     151.3            5  831.9
6      37.8            0   37.8
7     539.6            0  577.4
8     978.6            5  978.6
9     140.0            5 1118.6
10    145.1            5  285.1
11    252.5            0  252.5
12     90.0            0  342.5
13    588.8            5  588.8
14    459.1            0  459.1

这就是你所追求的吗?


推荐阅读