我想在R中做一些相当复杂的事情,我不确定从哪里开始.
我有一个看起来像这样的数据框:
main_val sub_val bit_one bit_two
one a 1 1
one a 1 0
one a 1 1
one b 1 0
two a 1 1
two b 1 1
two a 1 1
Run Code Online (Sandbox Code Playgroud)
现在我计算由每个主值的每个子值的位表示的0,1s,2和3的数量.所以这应该返回:
main_val sub_val 0s 1s 2s 3s
one a 0 0 1 2
one b 0 0 1 0
two a 0 0 0 2
two b 0 0 0 1
Run Code Online (Sandbox Code Playgroud)
有什么想法怎么做?我只能想到永远需要的循环(这将在很多数据上运行).
原谅我先前的评论-我觉得你其实只需要table()和reshape()这样做的基础R.它可能很慢,如果你有一个真正庞大的数据量,然而,在这一点上,我建议调查data.table.
# Start by turning of stringsAsFactors
options(stringsAsFactors = FALSE)
# Create fake data
fake.data <- data.frame(main_val = c("one","one","one","one","two","two","two"),
sub_val = c("a","a","a","b","a","b","a"),
bit_one = c(1,1,1,1,1,1,1),
bit_two = c(1,0,1,0,1,1,1))
# Generate a decimal representation of your two bits
fake.data$decimal <- fake.data$bit_one*1 +fake.data$bit_two*2
# Create a table of the results, then reshape it
fake.data.summary <- as.data.frame(table(Main=fake.data$main_val,
Sub=fake.data$sub_val,
Value=fake.data$decimal))
fake.data.summary <- reshape(data = fake.data.summary,
v.names = "Freq",
idvar = c("Main","Sub"),
timevar = "Value",
direction = "wide")
Run Code Online (Sandbox Code Playgroud)
请注意,在此示例中,输出中只有一个和三个,因为输入中只有一个和三个.如果需要统一输出,尽管可能存在或不存在,您可能需要对输出进行一些消毒 - 但我怀疑您不需要那样,因为您可能有足够的音量来确保表示0到3 .