我有两个列表:x,y
> x
carlo monte simulation model quantum
31 31 9 6 6
> y
model system temperature quantum simulation problem
15 15 15 13 13 12
Run Code Online (Sandbox Code Playgroud)
我应该使用什么函数来获取:
simulation model quantum
22 21 19
Run Code Online (Sandbox Code Playgroud)
我尝试像示例中那样合并它们,但它给了我一个错误:
merge(x,y,by=intersect(names(x),names(y)))产生:
fix.by(by.x, x) 中的错误:“by”必须指定唯一有效的列
该函数中没有参数如何处理值。最好使用什么功能?
intersect(names(x),names(y))将给出结果列表的名称,但如何将值汇总在一起?
您可以使用Mapin base R 返回一个列表。
Map("+", x[intersect(names(x),names(y))], y[intersect(names(x),names(y))])
$simulation
[1] 22
$model
[1] 21
$quantum
[1] 19
Run Code Online (Sandbox Code Playgroud)
或mapply返回一个可能更有用的命名向量。
mapply("+", x[intersect(names(x),names(y))], y[intersect(names(x),names(y))])
simulation model quantum
22 21 19
Run Code Online (Sandbox Code Playgroud)
使用[intersect(names(x), names(y))]不仅会将 x 和 y 的内容子集为具有相交名称的内容,而且还会对操作的元素进行正确排序。
数据
x <- list(carlo=1, monte=2, simulation=9, model=6, quantum=6)
y <-list(model=15, system=8, temperature=10, quantum=13, simulation=13, problem="no")
Run Code Online (Sandbox Code Playgroud)