R语言 为什么我的查找向量会对某些值进行NA转换?

6jygbczu  于 2023-05-11  发布在  其他
关注(0)|答案(2)|浏览(134)

我尝试使用查找向量为一个键赋值,但不知何故,查找向量似乎不能以相同的方式“科普”我所有的值。
首先,我想向你展示我的查找表,其中“X.box_nr”作为我的值,“durchmesser2019”作为我的键,我创建了一个更大的数据集的子集:

> Durchmesser2019 <- subset(ohneNA, jahr == 2019, select = c(X.box_nr, durchmesser2019))
> Durchmesser2019$durchmesser2019 <- as.numeric(Durchmesser2019$durchmesser2019)
> Durchmesser2019$X.box_nr <- as.numeric(Durchmesser2019$X.box_nr)
> Durchmesser2019

     X.box_nr durchmesser2019
42          6              26
56          7              26
65          9              26
106        14              26
119        15              32
121        16              26
171        22              26
230        29              26
234        30              32
270        34              32
273        35              26
290        37              32
301        38              32
329        42              26
366        46              26
370        47              26
386        49              26
422        53              26
442        56              32
466        59              32
479        60              32
530        67              26
577        73              26
589        74              26
596        75              26
607        76              26
659        83              26
887       111              26
958       120              32
980       123              26
989       124              26
1027      129              26
1069      134              26
1292      162              26
1324      166              26
1363      171              32
1429      179              26
1463      183              26
1473      185              32
1515      190              32
1534      192              26
1550      194              32
1564      196              26
1597      200              32
1631      204              32
1676      210              32
1684      211              26
1692      212              32
1747      219              26
1956      245              26
2029      254              26
2068      259              26
2160      270              26
2333      292              26

然后我继续执行以下代码:

Durchmesser2019$durchmesser2019 <- as.numeric(Durchmesser2019$durchmesser2019)
Durchmesser2019$X.box_nr <- as.numeric(Durchmesser2019$X.box_nr)

getdurchmesser2019 <- Durchmesser2019$durchmesser2019

names(getdurchmesser2019) <- Durchmesser2019$X.box_nr

unname(getdurchmesser2019[])

在这里,我发现,如果我将数字53插入最后一个代码的方括号中,我确实得到了正确的密钥,但如果我插入数字74,我得到了“NA”。
你知道为什么会这样吗?
我发现,如果N.box我将数字设置为invertet逗号,我确实会获得www.example.com _nr 74的写入密钥。
但实际上我想知道,为什么这些值不能以相同的方式由查找向量进行,以便能够使用此函数自动执行查找过程:

getdurchmesser_2019 <- function(X.box_nr, lookupvector = getdurchmesser2019){
  durchmesser2019 <- unname(lookupvector[X.box_nr])
  return(durchmesser2019)
}

我已经尝试将查找表的列设置为数字(参见上面的代码)。

46scxncf

46scxncf1#

根据@TarJae给出的答案,如果您提供一个用于索引的数字,它将用于位置匹配,而不是名称匹配。我也使用了他们的示例 Dataframe 。
选项:

Durchmesser2019[Durchmesser2019$X.box_nr == 53,]

它将Durchmesser2019$X.box_nr的每个值与53的值进行比较,并返回一个关于它们是否匹配的true或false向量。然后使用此向量来对数据框的行进行子集化。
输出是 Dataframe :(注意,如果找到多个匹配项,则可能有多行)

> Durchmesser2019[Durchmesser2019$X.box_nr == 53,]
    X.box_nr durchmesser2019
422       53              26

或者,我们可以使用相同的索引来子集化$durchmesser2019列:

Durchmesser2019$durchmesser2019[Durchmesser2019$X.box_nr == 53]

如果只有一个匹配项,则返回标量。

> Durchmesser2019$durchmesser2019[Durchmesser2019$X.box_nr == 53]
[1] 26

> Durchmesser2019$durchmesser2019[Durchmesser2019$X.box_nr == 53] |> str()
 num 26

根据要求,具有以下功能:

getDurch <- function(lookup, df){
  return(df$durchmesser2019[df$X.box_nr == lookup])
}

> getDurch(53, Durchmesser2019)
[1] 26
bt1cpqcv

bt1cpqcv2#

向量getdurchmesser2019的长度为54。54之后的所有值都是NA
数据:

Durchmesser2019 <- structure(list(X.box_nr = c(6, 7, 9, 14, 15, 16, 22, 29, 30, 
34, 35, 37, 38, 42, 46, 47, 49, 53, 56, 59, 60, 67, 73, 74, 75, 
76, 83, 111, 120, 123, 124, 129, 134, 162, 166, 171, 179, 183, 
185, 190, 192, 194, 196, 200, 204, 210, 211, 212, 219, 245, 254, 
259, 270, 292), durchmesser2019 = c(26, 26, 26, 26, 32, 26, 26, 
26, 32, 32, 26, 32, 32, 26, 26, 26, 26, 26, 32, 32, 32, 26, 26, 
26, 26, 26, 26, 26, 32, 26, 26, 26, 26, 26, 26, 32, 26, 26, 32, 
32, 26, 32, 26, 32, 32, 32, 26, 32, 26, 26, 26, 26, 26, 26)), row.names = c("42", 
"56", "65", "106", "119", "121", "171", "230", "234", "270", 
"273", "290", "301", "329", "366", "370", "386", "422", "442", 
"466", "479", "530", "577", "589", "596", "607", "659", "887", 
"958", "980", "989", "1027", "1069", "1292", "1324", "1363", 
"1429", "1463", "1473", "1515", "1534", "1550", "1564", "1597", 
"1631", "1676", "1684", "1692", "1747", "1956", "2029", "2068", 
"2160", "2333"), class = "data.frame")
Durchmesser2019$durchmesser2019 <- as.numeric(Durchmesser2019$durchmesser2019)
Durchmesser2019$X.box_nr <- as.numeric(Durchmesser2019$X.box_nr)
getdurchmesser2019 <- Durchmesser2019$durchmesser2019
names(getdurchmesser2019) <- Durchmesser2019$X.box_nr

dim(Durchmesser2019)

[1] 54  2

length(getdurchmesser2019)
[1] 54

如果您这样做:

unname(getdurchmesser2019[54])
[1] 26

unname(getdurchmesser2019[55])
[1] NA

相关问题