小编Tsu*_*Tsu的帖子

如何使用R中的ifelse条件从向量中删除

我有一个值为 (1,2,3,4) 的向量 a 和另一个值为 (1,1,0,1) 的向量 b。使用 b 中的元素作为标志,我想在元素 b 中找到 0 的相同位置从 A 中删除向量元素。

  a <- c(1,2,3,4)
  b <- c(1,1,0,1)
     for(i in 1:length(b))
  {
    if(b[i] == 0)
    {
      a <- a[-i]
    }
  }
Run Code Online (Sandbox Code Playgroud)

我得到了想要的输出

[1] 1 2 4

但是使用 ifelse,我没有得到所需的输出。

    a <- c(1,2,3,4)
  b <- c(1,1,0,1)
    for(i in 1:length(b))
    {
      a <- ifelse(b[i] == 0,a[-i],a)
    }
Run Code Online (Sandbox Code Playgroud)

输出:

[1] 1

在这种情况下如何使用 ifelse?

if-statement r

2
推荐指数
2
解决办法
309
查看次数

如何通过R中的管道将输出发送到特定位置

我正在编写一个小代码,比较两次并找到差异并以 HH:MM:SS 格式显示。

library(magrittr)
library(lubridate)
s1 <- ymd_hms(Sys.time())
s2 <- ymd_hms(Sys.time()) +200
d1 <- seconds_to_period(as.numeric(difftime(s2, s1, units = "secs")));
d2 <-sprintf('%02d:%02d:%02d', hour(d1), minute(d1), second(d1));
Run Code Online (Sandbox Code Playgroud)

d2 [1]“00:03:21”

我尝试的另一种方法是通过管道技术。但在这里,我收到一个错误。

s1 <- ymd_hms(Sys.time())
s2 <- ymd_hms(Sys.time()) +200
d3 <- difftime(s2, s1, units = "secs")  %>% as.numeric() %>% seconds_to_period() %>% sprintf('%02d:%02d:%02d', hour(.), minute(.), second(.))
Run Code Online (Sandbox Code Playgroud)

d3 <- difftime(s2, s1, 单位 = "秒") %>% as.numeric() %>% secondary_to_period() %>% + sprintf('%02d:%02d:%02d', hour(.) , 分钟(.), 秒(.)) sprintf(., "%02d:%02d:%02d", 小时(.), 分钟(.), 秒(.)) 中的错误: 'fmt' 不是字符向量

点操作似乎不适用于这种情况。我应该怎么办?

另外,有没有更好的方法来实现时间功能?

r pipe

1
推荐指数
1
解决办法
241
查看次数

标签 统计

r ×2

if-statement ×1

pipe ×1