【发布时间】:2018-12-19 02:55:37
【问题描述】:
我正在尝试根据另一个 df 的百分比将一个 df 中的值存储到一个新的数据框中。
df1
"seq" "loc" "ball" "square" "triangle"
1 abcd b 65 12 9
2 abcd a 0 75 0
3 ght5 a 5 10 25
4 dfsf b 12 9 75
df2
"Type" "n" "n/2" "1/n"
1 ball 10 50 10
2 square 9 55.5 11.1
3 triangle 6 50 16.6`
我想按“Type”存储“seq”和“loc”,让我知道它是高于(>=)“n/2”值还是低于(
output df3
"seq" "loc" "ball" "square" "triangle"
1 abcd b True NA False
2 abcd a False True False
3 ght5 a False False NA
4 dfsf b NA False True`
我使用 True/NA/False 来表示 >=/between/
当我输入此内容时,我想我可能会先复制 df1 以用作 df3,然后只存储新值来代替百分比。这似乎比选择所有内容并制作新表更容易?在那之后,我不知道该去哪里。
编辑: 目前正在玩这个,但没有运气在数据框中存储一个值。
df3 <- df1
for(i in seq_len(nrow(df2)))
{
df3[, df2$Type[i]] <-
sapply(1:length(df2$Type),
function(y) sapply(df3[, df2$Type][,y],
function(x) ifelse(x < df2[y, c("1/n")], "1",
ifelse(x > df2[y, c("n/2")], "3", "2")) ))
}
编辑:(添加 df1 和 df2 的 dput(head))
df1
structure(list(Seq = structure(c(1L, 2L, 2L, 3L, 3L), .Label =
c("AAAAAACCAGTCCCAGTTCGGATTG",
"AAAAAACCAGTCTCAGTTCGGATTG", "AAAAAACCGGTCACAGTTCAGATTG"), class =
"factor"),
loc = structure(c(2L, 1L, 2L, 1L, 2L), .Label = c("b",
"t"), class = "factor"), Ball = c(0, 0, 0, 0, 0), Cat = c(0,
0, 0, 16.6666666666667, 16.6666666666667), Square = c(0,
0, 0, 0, 0), Water = c(0, 0, 0, 33.3333333333333, 33.3333333333333
)), row.names = c(NA, -5L), class = c("grouped_df", "tbl_df",
"tbl", "data.frame"), vars = c("Seq", "loc"), drop = TRUE, indices =
list(
0L, 1L, 2L, 3L, 4L), group_sizes = c(1L, 1L, 1L, 1L, 1L),
biggest_group_size = 1L, labels = structure(list(
Seq = structure(c(1L, 2L, 2L, 3L, 3L), .Label =
c("AAAAAACCAGTCCCAGTTCGGATTG",
"AAAAAACCAGTCTCAGTTCGGATTG", "AAAAAACCGGTCACAGTTCAGATTG"), class =
"factor"),
loc = structure(c(2L, 1L, 2L, 1L, 2L), .Label = c("b",
"t"), class = "factor")), row.names = c(NA, -5L), class = "data.frame",
vars = c("Seq",
"loc"), drop = TRUE))
df2
dput(head(df2))
structure(list(Type = c("Ball", "Cat", "Square", "Water"), n = c(4L,
6L, 3L, 6L), `n/2` = c(50, 50, 66.6666666666667, 50), `1/n` = c(25,
16.6666666666667, 33.3333333333333, 16.6666666666667)), row.names = c(NA,
-4L), class = c("tbl_df", "tbl", "data.frame"))
>
【问题讨论】:
标签: r