Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/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
如何将一个新列添加到一个数据框中,该数据框是变量";人力资源部;如果两个;年龄“;两个dfs中的变量在R中匹配?_R_Variables_New Operator - Fatal编程技术网

如何将一个新列添加到一个数据框中,该数据框是变量";人力资源部;如果两个;年龄“;两个dfs中的变量在R中匹配?

如何将一个新列添加到一个数据框中,该数据框是变量";人力资源部;如果两个;年龄“;两个dfs中的变量在R中匹配?,r,variables,new-operator,R,Variables,New Operator,我的目标是在df1中创建一个新列“HoLj”,如果df1中的相应年龄与df2中的年龄2匹配,则该列是df2中“hr”的-ln df1<- data.frame(age = c("1","2","4","5","7","8"), dif = c("y", "n", "y", "n","n","y") df2<- data.frame(age2=c("1","2","3","4","5","6","7","8"),hr=c(56, 57, 23, 46, 45, 19, 21, 79)

我的目标是在df1中创建一个新列“HoLj”,如果df1中的相应年龄与df2中的年龄2匹配,则该列是df2中“hr”的-ln

df1<- data.frame(age = c("1","2","4","5","7","8"), dif = c("y", "n", "y", "n","n","y")

df2<- data.frame(age2=c("1","2","3","4","5","6","7","8"),hr=c(56, 57, 23, 46, 45, 19, 21, 79)

谢谢大家!

我们可以进行连接,然后获得自然日志

library(dplyr)
left_join(df1, df2) %>%
     mutate(hoLj = -log(hr)) %>%
     select(-hr)

或使用
数据。表格

library(data.table)
setDT(df1)[df2, hoLj := -log(hr), on = .(age)]
df1
#   age dif      hoLj
#1:   1   y -4.025352
#2:   2   n -4.043051
#3:   4   y -3.828641
#4:   5   n -3.806662
#5:   7   n -3.044522
#6:   8   y -4.369448

非常感谢。如果df2中的“年龄”名称与df1中的名称不同,该怎么办。就像可能的“age2”?@TongClaireXu没有问题,只需在
左连接中使用
by=c('age'='age2')
,在第二种情况下,
on=(age=age2)
我得到了下面的错误消息:
setDT(dft1)[dft2,hoLj:=-log(hr),on=(age=age2)]的数学错误系数(hr):“log”对于factors
@TongClaireXu没有意义,这只是因为您必须将“hr”创建为
字符
,默认情况下,如果
stringsAsFactors=TRUE
,则它将是一个factors。请将“hr”列更改为数字列。i、 我知道了,谢谢!同样,如果我的df2被重命名为“population1”,则hr是“white_u1”
>setDT(df1)[population1,HoLj:=-log(white_u1),on=(age=age2)]中的错误
[.data.table
(setDT(df1),population1,
:=
(HoLj,-log(white_u1)),:逻辑错误。i不是data.table,但提供了“on”参数。
这里可能有什么问题?谢谢!
library(data.table)
setDT(df1)[df2, hoLj := -log(hr), on = .(age)]
df1
#   age dif      hoLj
#1:   1   y -4.025352
#2:   2   n -4.043051
#3:   4   y -3.828641
#4:   5   n -3.806662
#5:   7   n -3.044522
#6:   8   y -4.369448