r - 如何根据 list() 中的相应值替换 dataframe() 中的值?
问题描述
我有一个列表和一个数据框。数据框有两列,一列歌曲,一列歌曲类型。我有一个歌曲列表,用于输入一首歌曲。
allsongs <- data.frame("Song" = c(1, 2, "3A", "9C", 6, 5, "12B", "32A", 18, 27, 24, "1D"),
"Type" = 0)
type1songs <- list(c(1, 2, "32A", 6, "1D"))
我想使用此列表将“1”的值应用于该列表中数据框中所有歌曲的 $Type。
所以它看起来像这样。
Song Type
1 1 1
2 2 1
3 3A NA
4 9C NA
5 6 1
6 5 NA
7 12B NA
8 32A 1
9 18 NA
10 27 NA
11 24 NA
12 1D 1
我怎么做?
解决方案
我们可以使用match
or %in%
-match
返回匹配的位置,默认情况下nomatch
是NA
。一旦我们得到匹配的索引,创建一个逻辑向量> 0
并将其强制为二进制(+
)
allsongs$Type <- +(match(allsongs$Song, type1songs[[1]]) > 0)
-输出
allsongs
# Song Type
#1 1 1
#2 2 1
#3 3A NA
#4 9C NA
#5 6 1
#6 5 NA
#7 12B NA
#8 32A 1
#9 18 NA
#10 27 NA
#11 24 NA
#12 1D 1
或者一个选项data.table
library(data.table)
setDT(allsongs)[Song %in% type1songs[[1]], Type := 1]
或与base R
allsongs$Type[allsongs$Song %in% type1songs[[1]]] <- 1
推荐阅读
- c++ - EventEmitter2 C++ 实现
- ios - iOS:如何显示一个“可点击标签”框
- mysql - 按列分组。如果为 null,则按 MySQL 的其他列分组
- python-3.x - Python加密xlsx而不调用win32 COM API
- python - Supervisord 监听器:每 10 分钟执行一次 symfony 命令
- macos - 在 macOS 64x 上执行时 ngrock 退出
- reactjs - 为什么在使用 React 严格模式时会出现错误?
- python - 为什么我在 Python3 中的巧合指数之和的平均值是错误的?
- python - 如何从 pandas DataFrame 中找到三个最接近的值?
- x86 - 将内核映像添加到 BIOS 二进制文件