Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如果在另一列中为False,如何使列值为负值_R - Fatal编程技术网

R 如果在另一列中为False,如何使列值为负值

R 如果在另一列中为False,如何使列值为负值,r,R,我一直在四处寻找,但似乎找不到解决问题的办法 这就是我们正在讨论的数据集: NS WE LatCopy LongCopy FALSE FALSE 48.89328 5.803433 TRUE FALSE 48.55725 6.877400 TRUE FALSE 48.39922 9.383667 FALSE TRUE 48.37538 9.517017 TRUE FALSE 48.20710 12.324067 TRUE TRUE 48.16878 12.82

我一直在四处寻找,但似乎找不到解决问题的办法

这就是我们正在讨论的数据集:

   NS    WE  LatCopy  LongCopy
FALSE FALSE 48.89328  5.803433
TRUE  FALSE 48.55725  6.877400
TRUE  FALSE 48.39922  9.383667
FALSE TRUE  48.37538  9.517017
TRUE  FALSE 48.20710 12.324067
TRUE  TRUE  48.16878 12.822067
因为这些是坐标,所以我不得不放弃风向,以便将它们转换为十进制度数。但是,我现在没有-指示器

我想要的结果是这样的:

   NS    WE  LatCopy  LongCopy
FALSE FALSE 48.89328 -5.803433
TRUE  FALSE 48.55725 -6.877400
TRUE  FALSE 48.39922 -9.383667
FALSE TRUE -48.37538  9.517017
TRUE  FALSE 48.20710 -12.32406
TRUE  TRUE 48.16878 -12.82206
数据

df <- read.table(text="NS    WE  LatCopy  LongCopy
FALSE FALSE 48.89328  5.803433
TRUE  FALSE 48.55725  6.877400
TRUE  FALSE 48.39922  9.383667
FALSE TRUE  48.37538  9.517017
TRUE  FALSE 48.20710 12.324067
TRUE  TRUE  48.16878 12.822067",h=T)

df
dataframe$LatCopy您还可以使用
符号
,稍加调整:

df[c("LongCopy", "LatCopy")]  <- 
  df[c("LongCopy", "LatCopy")] * sign(.5-df[c("NS","WE")]) # or `2*` instead of sign
#      NS    WE   LatCopy   LongCopy
# 1  TRUE FALSE  48.89328  -5.803433
# 2  TRUE FALSE  48.55725  -6.877400
# 3  TRUE FALSE  48.39922  -9.383667
# 4 FALSE  TRUE -48.37538   9.517017
# 5  TRUE FALSE  48.20710 -12.324067
# 6  TRUE FALSE  48.16878 -12.822067

df[c(“LongCopy”、“LatCopy”)]只要有多种可能性,一个
dplyr
解决方案:

data %>%
  mutate(LatCopy = ifelse(NS, LatCopy, -LatCopy),
         LongCopy = ifelse(WE, LongCopy, -LongCopy))
setDT(data)[, LatCopy := ifelse(NS, LatCopy, -LatCopy)
            ][, LongCopy := ifelse(WE, LongCopy, -LongCopy)]
A
数据表
解决方案:

data %>%
  mutate(LatCopy = ifelse(NS, LatCopy, -LatCopy),
         LongCopy = ifelse(WE, LongCopy, -LongCopy))
setDT(data)[, LatCopy := ifelse(NS, LatCopy, -LatCopy)
            ][, LongCopy := ifelse(WE, LongCopy, -LongCopy)]

因为NS&WE已经是逻辑的了,所以省略
==TRUE
部分可能更简单。问题是一元运算符“-”根据R无效,我刚刚尝试过。哦,是的,Alexis犯了一个错误,应该是
-dataframe$LatCopy
是的,我会更改它。这似乎只在NS和WE之间存在差异时才起作用,但当这两个都为真时,输出为两个负数,反之为假。有什么解决办法吗?我不明白你的意思,你不想在另一列中把FALSE转换成负值吗?我现在看到您的问题不包含实际问题,只包含以下示例:),因此我只能复制它。你想做什么?也许你可以用我的解决方案失败的例子来更新你的例子?当然。只是想澄清一下:当NS和WE为false时,似乎LatCopy和LongCopy都是正值,而它们应该是负值。当NS和WE为真时,LongCopy和LatCopy为负,但应为正。您能否确认新预期输出的第一行是正确的?由于FALSE更改了LongCopy,但没有更改LatCopy第一个选项起作用,我删除了管道操作符,并单独执行了该操作,因为必须覆盖列。但是谢谢!因为您没有使用管道,所以正如@Moody_mudscapper已经注意到的那样,base R将是
数据,您可以简单地用
数据%…
.df$LatCopy覆盖数据