【问题标题】:subset vector and print two elements in a for loop子集向量并在 for 循环中打印两个元素
【发布时间】:2018-09-05 06:25:44
【问题描述】:

我有一个向量s,在“for 循环”中,我需要先打印前两个值 (1,2),然后是 (2,3),然后是 (3,4),依此类推。

s <- c(1, 2, 3, 4 ,5)

我能想到的只有

for (i in s) {
  print(i)
}

它一次只打印一个元素,有人可以帮助这个小代码。

【问题讨论】:

    标签: r vector subset


    【解决方案1】:

    我们可以将库zoo中的rollapllywidth = 2一起使用,因为我们需要一次打印2个元素,并且我们用“,”将这些元素连接在一起。

    library(zoo)
    rollapply(s, 2, function(x) paste0(x, collapse = ","))
    
    #[1] "1,2" "2,3" "3,4" "4,5"
    

    【讨论】:

    • 谢谢,不是向量,如果我有一个 df$col 并想对其执行相同的功能,我应该如何修改它?
    • @user3698773 而不是向量 put df$colrollapply(df$col, 2, function(x) paste0(x, collapse = ","))
    【解决方案2】:

    你可以通过

    s <- c(1, 2, 3, 4 ,5)
    for (i in 1:(length(s)-1)){
      print(paste('(', s[i], ",", s[i+1], ")", sep = ""))
    }
    

    我希望这会有所帮助!

    【讨论】:

      【解决方案3】:
      for(i in 1:(length(s)-1)) print(s[c(i:(i+1))])
      

      【讨论】:

      • 谢谢,如果我有一个 df$col 并想对其执行相同的功能,而不是向量,我应该如何修改它?
      • for(i in 1:(dim(df)[1]-1)) print(df$col[c(i:(i+1))])(这是假设您必须使用for 循环。没有它有更好的方法来实现)
      • 谢谢,请提出更好的方法来实现它而无需 for 循环。
      • paste(df$col,lead(df$col))[-dim(df)[1]] 将导致"1 2" "2 3" "3 4" "4 5"
      • 让它更漂亮:paste0("(",df$col,", ",lead(df$col),")")[-dim(df)[1]]
      【解决方案4】:

      另一种解决方案:

      sapply(seq_along(s)[-length(s)], function(i) paste(s[i], s[i+1], sep=", "))
      [1] "1, 2" "2, 3" "3, 4" "4, 5"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-05
        • 2021-03-13
        • 2021-10-18
        • 2022-01-23
        相关资源
        最近更新 更多