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)
dfdataframe$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覆盖数据