這里、這里和這里都提出了非常相似的問題。但是,它們似乎都依賴于知道資料的列名。
我正在嘗試獲取與數字向量匹配的資料框的列索引。例如,如果我有一些資料和一個像這樣的向量:
dat <- data.frame(
x = c(1,2,3,4,5),
y = c(10,9,8,7,6),
z = c(2,4,6,8,10)
)
testVec <- c(2,4,6,8,10)
我只想回傳dat匹配項的列索引testVec。我們可以看到dat$z匹配testVec...所以在這種情況下我只想回傳3。
關于我如何做到這一點的任何建議?
uj5u.com熱心網友回復:
這是一個基本的 R 方法,它將 中的每一列進行比較dat以testVec查看它們是否為identical. which如果它們相同,則用于輸出列索引。
which(sapply(1:ncol(dat), function(x) identical(dat[,x], testVec)))
[1] 3
更新 @nicola 為我的原始代碼提供了更好的語法(您可以在此答案下的評論中看到它):
which(sapply(dat, identical, y = testVec))
z
3
uj5u.com熱心網友回復:
你也許可以試試這個
> which(colSums(dat == testVec) == nrow(dat))
z
3
uj5u.com熱心網友回復:
減去testVec.
which(colSums(dat - testVec) == 0)
# z
# 3
沒有名字:
unname(which(colSums(dat - testVec) == 0))
# [1] 3
資料:
dat <- structure(list(x = c(1, 2, 3, 4, 5), y = c(10, 9, 8, 7, 6), z = c(2,
4, 6, 8, 10)), class = "data.frame", row.names = c(NA, -5L))
testVec <- c(2, 4, 6, 8, 10)
uj5u.com熱心網友回復:
帶有selectfrom的選項dplyr
library(dplyr)
dat %>%
select(where(~ all(testVec == .x))) %>%
names %>%
match(names(dat))
[1] 3
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/426681.html
標籤:r
上一篇:計算滾動30天視窗內的觀察值
