首页 > 解决方案 > 如果使用的元素从 R 中的向量中选择下一个

问题描述

我对 R 很陌生,不幸的是我找不到下面问题的答案。

我有一个数据集:

df <- data.frame(room = rep("room1.", 6),
                 name = c("piet", "klaas", "Sara", "mo.", "piet", "jo"),
                 time = c("9:00", "9:00", "12:00", "14:00", "14:00", "14:00"))
df
#>     room  name  time
#> 1 room1.  piet  9:00
#> 2 room1. klaas  9:00
#> 3 room1.  Sara 12:00
#> 4 room1.   mo. 14:00
#> 5 room1.  piet 14:00
#> 6 room1.    jo 14:00

和一个向量:

pcs <- c("pc1", "pc2", "pc3")

我想添加一个列pc,其中基于 if 语句添加了向量的一个元素。如果pc为空,则将向量中的第一个元素添加到 column pc,但如果time已经使用了中的值,则选择下一个元素。

所需的输出:

room   name  time  pc
room1. piet  9:00  pc1
room1. klaas 9:00  pc2
room1. Sara  12:00 pc1
room1. mo.   14:00 pc1
room1. piet  14:00 pc2
room1. jo    14:00 pc3

标签: rif-statement

解决方案


这是使用的基本 R 解决方案ave

dfout <- within(df,pc <- ave(seq(nrow(df)),time,FUN = function(v) pcs[seq_along(v)]))

这样

> dfout
    room  name  time  pc
1 room1.  piet  9:00 pc1
2 room1. klaas  9:00 pc2
3 room1.  Sara 12:00 pc1
4 room1.   mo. 14:00 pc1
5 room1.  piet 14:00 pc2
6 room1.    jo 14:00 pc3

数据

df <- structure(list(room = c("room1.", "room1.", "room1.", "room1.", 
"room1.", "room1."), name = c("piet", "klaas", "Sara", "mo.", 
"piet", "jo"), time = c("9:00", "9:00", "12:00", "14:00", "14:00", 
"14:00")), class = "data.frame", row.names = c(NA, -6L))

推荐阅读