我需要在 R 中模擬一個具有 3 列的資料框。
前兩列必須是兩個分類變數,而最后一列是連續的。
資料框應如下所示:

col3 中的數字只是說明性的。重要的是 col1(即第一個分類變數)應該呈現兩個可能的值(即我的示例中的“A”和“B”),而 col2(即第二個類別變數)應該呈現其他兩個可能的值(即,在我的示例中,“Y”和“X”)。如您所見,通過這種方式我們可以識別出四組行:
- col1 中帶有“A”且 col2 中帶有“Y”的行;
- col1 中帶有“A”且 col2 中帶有“X”的行;
- col1 中帶有 "B" 且 col2 中帶有 "Y" 的行;
- col1 中帶有“B”且 col2 中帶有“X”的行。
我想要的是編譯 col3 以便在上述四組中的每一組中都有例外值(例如,第一組中的例外值不一定是第二組中包含的資料中的例外值)。
uj5u.com熱心網友回復:
我會設定一個函式(下面的generateDataset)來生成您單獨需要的4個資料集。然后,您可以將它們連接在一起以獲得完整的表。
我在函式引數中包含了 nOutlier 和 scaleValue 引數。這些允許您在其他正常資料中插入例外值。
library(tidyverse)
generateDataset <- function(col1Val, col2Val, meanVal, sdVal, nVal, nOutliers, scaleValue){
x <- data.frame(
col1 = rep(col1Val, 10),
col2 = rep(col2Val, 10),
col3 = rnorm(mean = meanVal, sd = sdVal, n=nVal)
)
y <- x %>%
sample_n(size = nOutliers) %>%
mutate(col3New = col3 * scaleValue)
z <- x %>%
anti_join(y, by=c("col1","col2","col3")) %>%
bind_rows(y %>% mutate(col3 = col3New) %>% select(-col3New))
return(z)
}
df <- generateDataset("A", "X", 10, 1, 200, 5, 2) %>%
bind_rows(generateDataset("A", "Y", 10, 4, 200, 1, 10)) %>%
bind_rows(generateDataset("B", "X", 20, 2, 200, 10, 15))
ggplot(df)
geom_boxplot(aes(x=col1, y=col3, colour=col2))
uj5u.com熱心網友回復:
不是真的肯定要用于分配col3,而是通過使用由定義的輸入正態分布col1和col2,然后加以編纂的一個因素,你可以這樣做:
nsim <- 1000
col1 <- sample(1:2, nsim, replace = T)
col2 <- sample(26:25, nsim, replace = T)
col3 <- rnorm(nsim, col1*col2, col2/col1)
col1 <- factor(col1, labels = LETTERS[1:2])
col2 <- factor(col2, labels = LETTERS[26:25])
df <- data.frame(col1, col2, col3)
with(df, boxplot(col3~col1*col2))

如果要指定每個分布(如果數量不是很大),也可以使用該ifelse函式:
nsim <- 1000
col1 <- sample(LETTERS[1:2], nsim, replace = T)
col2 <- sample(LETTERS[26:25], nsim, replace = T)
df <- data.frame(col1, col2)
df$col3 <- apply(df, 1, function(y) ifelse(y[1] == "A", ifelse(y[2] == "Z", rnorm(1, 10, 2), rnorm(1, 11, 2)),
ifelse(y[2] == "Z", rnorm(1, 15, 2), rnorm(1, 19, 2))))
with(df, boxplot(col3~col1*col2))

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/390453.html
上一篇:如何根據過濾值用修改后的列替換R中的列?(去除面板資料中的例外值)
下一篇:Rdevtools檢查win函式在curl::curl_fetch_memory(url,handle=h)中拋出錯誤:接收失敗:連接已重置
