我想用另一列中的值替换列表列中列表的单个元素:
df2 <- tibble(a = list(list(number = 1, letter = "c"), list(number = 2, letter = "d")), b = c("c", "d"))
print(df2)
#> # A tibble: 2 x 2
#> a b
#> <list> <chr>
#> 1 <list [2]> c
#> 2 <list [2]> d
这是输出的样子:
for (i in 1:nrow(df)) {
df$a[[i]]$letter <- df$b[[i]]
}
我能够使用for循环和令人困惑的子集语法,但是我想知道是否有一个整齐的函数或更优雅的方法来实现我的目标:
<img src="save.png"(click)="validateandsave(model)">
<input type="text" name="code" [(ngModel)]="model.code">
<input type="text" name="name" [(ngModel)]="model.name">
<a routerLink="PC">
<div (click)="showsettings()"> </div>
<router-outlet><router-outlet>
答案 0 :(得分:1)
我们可以通过从相应的mapply
元素中更改每个列表的letter
元素中的值来使用使用b
的基本R方法。
df$a <- mapply(function(x, y) {x['letter'] <- y;list(x)}, df$a, df$b)
df$a
#[[1]]
#[[1]]$number
#[1] 1
#[[1]]$letter
#[1] "c"
#[[2]]
#[[2]]$number
#[1] 2
#[[2]]$letter
#[1] "d"
如果您对tidyverse
方法感兴趣,我们可以使用map2
来使用相同的逻辑
library(tidyverse)
df$a <- map2(df$a, df$b, function(x, y) {x['letter'] <- y;x})
或通过lapply
do.call("rbind", lapply(seq_len(nrow(df)), function(x) {
df$a[[x]]['letter'] <- df$b[x]
df[x, ]
}))