Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 数据帧中的搜索与匹配_R_Distance_Dataframe - Fatal编程技术网

R 数据帧中的搜索与匹配

R 数据帧中的搜索与匹配,r,distance,dataframe,R,Distance,Dataframe,我对R非常陌生,如果这是一个非常基本的问题,请原谅我。使用下面的说明,我编辑了这个问题,希望它更有意义 我有一个数据框d,看起来像这样 SAMPLE <-c("blueberry", "broccoli") OPT1 <-c("apple", "beef") OPT2 <-c("oatmeal", "bacon") RESPONSE <- c("oatmeal", "beef") d <- data.frame(SAMPLE,OPT1,OPT2, RESPONSE)

我对
R
非常陌生,如果这是一个非常基本的问题,请原谅我。使用下面的说明,我编辑了这个问题,希望它更有意义

我有一个数据框
d
,看起来像这样

SAMPLE <-c("blueberry", "broccoli")
OPT1 <-c("apple", "beef")
OPT2 <-c("oatmeal", "bacon")
RESPONSE <- c("oatmeal", "beef")
d <- data.frame(SAMPLE,OPT1,OPT2, RESPONSE)
因此,我想在
dist
中查找
d$RESPONSE
d$SAMPLE
的行/列匹配。在
d$OPT1.d
的新列中,第一个条目应为
0.09
,即
dist
中“燕麦”和“蓝莓”之间的距离。第二个条目应该是
0.671
,“牛肉”和“花椰菜”之间的距离


希望这更有意义?我使用了下面的代码,
d$OPT1.d这是为矩阵索引量身定制的,这是R的一个鲜为人知但非常强大的功能。您所需要的就是这个命令(然后对OPT2重复)


d$OPT1D这是为矩阵索引量身定制的,这是R的一个鲜为人知但非常强大的功能。您所需要的就是这个命令(然后为OPT2重复)


d$OPT1D您的第一个问题是,d的类型是因子,当您尝试将其用作dist[cbind(d$RESPONSE,d$OPT1)]中的索引时,会将其转换为整数(而不是字符)。调用data.frame时需要使用stringsAsFactors=FALSE

d <- data.frame(SAMPLE,OPT1,OPT2, RESPONSE, stringsAsFactors=FALSE)

第一个问题是d的类型是因子,当您尝试在dist[cbind(d$RESPONSE,d$OPT1)]中将其用作索引时,会将其转换为整数(而不是字符)。调用data.frame时需要使用stringsAsFactors=FALSE

d <- data.frame(SAMPLE,OPT1,OPT2, RESPONSE, stringsAsFactors=FALSE)

还要注意,距离矩阵是不对称的,这有点可疑。作为一种实践,在这个网站上,你应该使用评论与回答的人进行交流。如果你意识到你的问题不够清楚,你应该编辑你的问题。但你们不应该在重新提问时给出答案,还要注意你们的距离矩阵是不对称的,这有点可疑。作为一种实践,在这个网站上,你应该使用评论与回答的人进行交流。如果你意识到你的问题不够清楚,你应该编辑你的问题。但你不应该在回复后再问你这个问题。
d$OPT1D <- dist[cbind(d$RESPONSE, d$OPT1)]
d <- read.table(text="SAMPLE        OPT1        OPT2        RESPONSE        OPT1D        OPT2D
banana        blueberry   oatmeal     oatmeal         NA           NA
broccoli      beef        bacon       beef            NA           NA",
                 header=TRUE, stringsAsFactors=FALSE)
dist <- read.table(text="blueberry      beef           oatmeal
0              0.15           0.09
0.17           0              0.0872
0.09           0.0979         0", header=TRUE, stringsAsFactors=FALSE)
dist <- as.matrix(dist)
rownames(dist) <- colnames(dist)



> d
    SAMPLE      OPT1    OPT2 RESPONSE OPT1D OPT2D
1   banana blueberry oatmeal  oatmeal  0.09    NA
2 broccoli      beef   bacon     beef  0.00    NA
d <- data.frame(SAMPLE,OPT1,OPT2, RESPONSE, stringsAsFactors=FALSE)
dist <- cbind(blueberry,beef, oatmeal, broccoli)
rownames(dist) <- colnames(dist) <- X
dist[cbind(d$RESPONSE, d$SAMPLE)]
[1] 0.090 0.671