如何在R中的数据帧中添加新列并使用现有列?
我试图添加一个名为“已访问”的列,该列查看名为“访问”的现有列,如果“访问”=NA,则我希望“已访问”为=0,但如果“访问”>0,则“已访问”应为=1。我得到一个错误,它表示“变异中的错误(访问=if(访问=NA”){: 找不到“访问”对象。感谢您的所有建议!!这是我的代码如何在R中的数据帧中添加新列并使用现有列?,r,R,我试图添加一个名为“已访问”的列,该列查看名为“访问”的现有列,如果“访问”=NA,则我希望“已访问”为=0,但如果“访问”>0,则“已访问”应为=1。我得到一个错误,它表示“变异中的错误(访问=if(访问=NA”){: 找不到“访问”对象。感谢您的所有建议!!这是我的代码 mutate(Visited = if(Visits == "NA") { replace("NA", 0) } else { replace(1) } )```
mutate(Visited =
if(Visits == "NA") {
replace("NA", 0)
} else {
replace(1)
}
)````
ifelse
应该可以做到。注意:df
可以替换为您的dataframe
s名称:
df$Visited = ifelse(is.na(df$Visits), 0, 1)
如果您更喜欢dplyr:
library(dplyr)
df = df %>%
mutate(Visited = ifelse(is.na(Visits), 0, 1))
ifelse
应该可以做到。注意:df
可以替换为您的dataframe
s名称:
df$Visited = ifelse(is.na(df$Visits), 0, 1)
如果您更喜欢dplyr:
library(dplyr)
df = df %>%
mutate(Visited = ifelse(is.na(Visits), 0, 1))
数据:
df
数据:
df一些问题:
如果在变异中使用,则不能这样使用:我推断您的数据不止一行,在这种情况下访问==“NA”
将是一个长度大于1的逻辑向量。if
条件必须具有长度-1。您可能需要的是一个向量化条件,例如ifelse
或replace
有几件事需要实现:矢量化条件不会短路(&
和|
会短路,&
和|
不会短路,并且您不能仅仅交换它们);与逻辑
、整数
、数值
和字符
以外的类一起使用
您使用的replace
不正确:它需要三个参数,不能推断任何结果。您不能只使用replace(0)
希望它知道在调用之外查找条件
R符号NA
(可以是数字的,逻辑的,字符串等)和字符串“NA”
之间有很大的区别。有时,误读数据会给你字符串“NA”
,但通常不是。请注意NA=.
任何东西都会是NA
(不正确/错误),因为NA
可以解释为“可以是任何东西”以及“不适用”。因此,如果代码中有NA
s,那么==“NA”
将首先在内部将数据强制为字符串,而不会将NA
转换为“NA”
,然后查找文本“NA”
,而不是您想要/需要的。我希望这是有意义的
错误消息表明您没有传递数据。mutate(Visited=…)
如果对mutate的调用位于dplyr/magrittr“管道”(%%>%
)中,则可以正常工作,但就其本身而言,mutate
要求其第一个参数是data.frame
,如mutate(mydata,Visited=…)
以下是一些适用于您的等效替代方案:
mydata%>%
变异(
Visited1=ifelse(!is.na(访问量)&访问量>0,1,0),
Visited2=replace(rep(1,n()),is.na(访问量)|访问量0)
)
第三个使用+(.)
快捷方式利用R从逻辑
到整数
的强制
您可以选择您喜欢的。一些问题:
如果在变异中使用,则不能这样使用:我推断您的数据不止一行,在这种情况下访问==“NA”
将是一个长度大于1的逻辑向量。if
条件必须具有长度-1。您可能需要的是一个向量化条件,例如ifelse
或replace
有几件事需要实现:矢量化条件不会短路(&
和|
会短路,&
和|
不会短路,并且您不能仅仅交换它们);与逻辑
、整数
、数值
和字符
以外的类一起使用
您使用的replace
不正确:它需要三个参数,不能推断任何结果。您不能只使用replace(0)
希望它知道在调用之外查找条件
R符号NA
(可以是数字的,逻辑的,字符串等)和字符串“NA”
之间有很大的区别。有时,误读数据会给你字符串“NA”
,但通常不是。请注意NA=.
任何东西都会是NA
(不正确/错误),因为NA
可以解释为“可以是任何东西”以及“不适用”。因此,如果代码中有NA
s,那么==“NA”
将首先在内部将数据强制为字符串,而不会将NA
转换为“NA”
,然后查找文本“NA”
,而不是您想要/需要的。我希望这是有意义的
错误消息表明您没有传递数据。mutate(Visited=…)
如果对mutate的调用位于dplyr/magrittr“管道”(%%>%
)中,则可以正常工作,但就其本身而言,mutate
要求其第一个参数是data.frame
,如mutate(mydata,Visited=…)
以下是一些适用于您的等效替代方案:
mydata%>%
变异(
Visited1=ifelse(!is.na(访问量)&访问量>0,1,0),
Visited2=replace(rep(1,n()),is.na(访问量)|访问量0)
)
第三个使用+(.)
快捷方式利用R从逻辑
到整数
的强制
您可以选择您喜欢的。谢谢-选项B工作得很好!谢谢-选项B工作得很好!非常感谢您的详细解释!我从中学到了很多。非常感谢