如何使x的向量从1到最大值

时间:2016-11-02 15:57:48

标签: r

在像这样的数据集中

如果我想制作

的矢量,我应该使用什么代码
x <- 1: max (day)/ID

?所以x将是

           1:7 for B1 
           1:11 for B2 
           1:22 for B3  

我试过

max_day <- summaryBy(day ~ ID , df ,FUN=max) # to extract the maximum day per ID
df<- merge (df, max_day) ## to create another column with the maximum day

 max_day<- unique(df[,c("ID", " day.max")]) ## to have one value (max) per ID

##& Finlay the vector
 x <-  1: (max_day$day.max)

我收到了这条消息

Warning message:    
In 1:(max_day$day.max) :
   numerical expression has 11134 elements: only the first used

有什么建议吗?

5 个答案:

答案 0 :(得分:4)

#include <iostream> using namespace std; int main() { char message; cout << "Enter a message"<<endl; do { cin.get(message); cout << "message " << message << endl; }while(message != '\n'); return 0; }

答案 1 :(得分:1)

我不知道应该如何看待你的输出,但你可以试试这个:

my_data <- data.frame(ID = c(rep("B1", 3), rep("B2", 4), rep("B3", 3)), 
    day = sample(1:20, 10, replace = TRUE))

tmp <- aggregate(test$day, by = list(test$ID), FUN = max)
sapply(1:nrow(tmp), function(y) return(1:tmp$x[y]))

# [[1]]
#  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19

# [[2]]
#  [1]  1  2  3  4  5  6  7  8  9 10 11

# [[3]]
#  [1]  1  2  3  4  5  6  7  8  9 10 11

答案 2 :(得分:1)

我们可以使用sapply循环ID的唯一元素,并为max列中的ID生成从1到day的序列

sapply(unique(df$ID), function(x) seq(1, max(df[df$ID == x, "day"])))

#[[1]]
#[1] 1 2 3 4 5 6 7

#[[2]]
#[1]  1  2  3  4  5  6  7  8  9 10 11

#[[3]]
#[1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22

如果我们想要将所有内容都作为一个向量,我们可以尝试unlist

unlist(sapply(unique(df$ID), function(x) seq(1, max(df[df$ID == x, "day"]))))

#[1]  1  2  3  4  5  6  7  1  2  3  4  5  6  7  8  9 10 11  1  2  3  4  5  6  7  8  9 10 
#   11 12 13 14 15 16 17 18 19 20 21 22

答案 3 :(得分:1)

另一种选择,使用Hadley Wickham的purrr包,作为tidyverse的一部分。

d <- data.frame(id = rep(c("B1", "B2", "B3"), c(3, 4, 5)),
            v = c(1:3, 1:4, 1:5),
            day = c(1, 3, 7, 1, 5, 9, 11, 3, 5, 11, 20, 22),
            number = c(15, 20, 30, 25, 26, 28, 35, 10, 12, 14, 16, 18))

library(purrr)

d %>%
    split(.$id) %>% 
    map(~1:max(.$day))

# $B1
# [1] 1 2 3 4 5 6 7

# $B2
# [1]  1  2  3  4  5  6  7  8  9 10 11

# $B3
# [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22

答案 4 :(得分:0)

df <-
data.frame(ID       = c(rep("B1",3),rep("B2",4),rep("B3",5)),
             V      = c(1,2,3,1,2,3,4,1,2,3,4,5),
             day    = c(1,3,7,1,5,9,11,3,5,11,20,22),
             number = c(15,20,30,25,26,28,35,10,12,14,16,18))

x <- list()
n <- 1
for(i in unique(df$ID)){
  max_day <- max(df$day[df$ID==i])
  x[[n]]  <- 1:max_day
  n       <- n+1
}
x
[[1]]
[1] 1 2 3 4 5 6 7

[[2]]
 [1]  1  2  3  4  5  6  7  8  9 10 11

[[3]]
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22