如何在 R 中的另一个 table 中获取值?
How to get a value in another table in R?
我的问题对你们中的许多人来说可能很简单。我有一个包含类别列表的小标题,类别列表旁边有与该类别相关的值。
我想根据这些值创建一个数据集。为此,我创建了一个新的 tibble。在一列中,我随机绘制了其中一个类别(函数示例,替换 =T)。在第二列中,我想为该类别的特征值添加噪声。
我的问题是找出如何在另一个 table.
中引用与此特定类别相关的单元格
这里有一个例子:
library(tidyverse)
carac <- tibble(
class = c("raptor","valor","defender"),
weight = c(123,125,596)
)
test <- tibble(
serie = sample(carac$class,100, replace=T),
weight = weight_of_this_class*rnorm(1,mean=1, sd=0.2)
)
我不知道用什么代替“weight_of_this_class”?我尝试了 carac[class],但显然不起作用:/
我想要的是这样的 table :
# A tibble: 100 x 2
serie weight
<chr> <dbl>
1 raptor 142.5
2 defender 660.3
3 raptor 129.6
4 valor 132.1
5 defender 822.3
6 defender 611.5
7 valor 117.4
8 raptor 112.7
9 valor 150.6
10 defender 712.6
# ... with 90 more rows
(我想要的例子是手动计算的数据,例如猛禽只是“123*rnorm(1,mean=1, sd=0.2)”。)
非常感谢!
一种方法是简单地预先采样,将其存储在 s
中,然后用 s
:
对 carac$class
和 carac$weight
进行子集化
n <- 100
s <- sample(nrow(carac), n, r = T)
test <- tibble(
serie = carac$class[s],
weight = carac$weight[s] * rnorm(n, mean = 1, sd = 0.2)
)
您可以使用 match
获取对应的 weight
的 serie
值选择。
tibble::tibble(
serie = sample(carac$class,100, replace=TRUE),
weight = carac$weight[match(serie, carac$class)]*rnorm(1,mean=1, sd=0.2)
)
当您使用 tidyverse
时,您可以只使用 slice_sample
...
test <- carac %>%
slice_sample(n = 100, replace = TRUE) %>% #sample from the rows of carac
mutate(weight = weight * rnorm(100, mean = 1, sd = 0.2)) #add noise
test <- tibble(
serie = sample(carac$class,100, replace=T),
weight = sapply(serie,
function(x){carac[carac$class==x, 2][[1]]})
*rnorm(1,mean=1, sd=0.2)
)
另一种方法:
serie = data.frame(class = sample(carac$class,100, replace=T))
test = as_tibble(merge(serie, carac, by = "class", all.x = TRUE))
test$weight = test$weight * rnorm(1,mean=1, sd=0.2)
我的问题对你们中的许多人来说可能很简单。我有一个包含类别列表的小标题,类别列表旁边有与该类别相关的值。 我想根据这些值创建一个数据集。为此,我创建了一个新的 tibble。在一列中,我随机绘制了其中一个类别(函数示例,替换 =T)。在第二列中,我想为该类别的特征值添加噪声。 我的问题是找出如何在另一个 table.
中引用与此特定类别相关的单元格这里有一个例子:
library(tidyverse)
carac <- tibble(
class = c("raptor","valor","defender"),
weight = c(123,125,596)
)
test <- tibble(
serie = sample(carac$class,100, replace=T),
weight = weight_of_this_class*rnorm(1,mean=1, sd=0.2)
)
我不知道用什么代替“weight_of_this_class”?我尝试了 carac[class],但显然不起作用:/
我想要的是这样的 table :
# A tibble: 100 x 2
serie weight
<chr> <dbl>
1 raptor 142.5
2 defender 660.3
3 raptor 129.6
4 valor 132.1
5 defender 822.3
6 defender 611.5
7 valor 117.4
8 raptor 112.7
9 valor 150.6
10 defender 712.6
# ... with 90 more rows
(我想要的例子是手动计算的数据,例如猛禽只是“123*rnorm(1,mean=1, sd=0.2)”。)
非常感谢!
一种方法是简单地预先采样,将其存储在 s
中,然后用 s
:
carac$class
和 carac$weight
进行子集化
n <- 100
s <- sample(nrow(carac), n, r = T)
test <- tibble(
serie = carac$class[s],
weight = carac$weight[s] * rnorm(n, mean = 1, sd = 0.2)
)
您可以使用 match
获取对应的 weight
的 serie
值选择。
tibble::tibble(
serie = sample(carac$class,100, replace=TRUE),
weight = carac$weight[match(serie, carac$class)]*rnorm(1,mean=1, sd=0.2)
)
当您使用 tidyverse
时,您可以只使用 slice_sample
...
test <- carac %>%
slice_sample(n = 100, replace = TRUE) %>% #sample from the rows of carac
mutate(weight = weight * rnorm(100, mean = 1, sd = 0.2)) #add noise
test <- tibble(
serie = sample(carac$class,100, replace=T),
weight = sapply(serie,
function(x){carac[carac$class==x, 2][[1]]})
*rnorm(1,mean=1, sd=0.2)
)
另一种方法:
serie = data.frame(class = sample(carac$class,100, replace=T))
test = as_tibble(merge(serie, carac, by = "class", all.x = TRUE))
test$weight = test$weight * rnorm(1,mean=1, sd=0.2)