如何将一个新列添加到一个数据框中,该数据框是变量";人力资源部;如果两个;年龄“;两个dfs中的变量在R中匹配?
我的目标是在df1中创建一个新列“HoLj”,如果df1中的相应年龄与df2中的年龄2匹配,则该列是df2中“hr”的-ln如何将一个新列添加到一个数据框中,该数据框是变量";人力资源部;如果两个;年龄“;两个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<- 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