假设我的数据看起来像这样:
level start end
1 1 133.631 825.141
2 2 133.631 155.953
3 3 146.844 155.953
4 2 293.754 302.196
5 3 293.754 302.196
6 4 293.754 301.428
7 2 326.253 343.436
8 3 326.253 343.436
9 4 333.827 343.436
10 2 578.066 611.766
11 3 578.066 611.766
12 4 578.066 587.876
13 4 598.052 611.766
14 2 811.228 825.141
15 3 811.228 825.141
Run Code Online (Sandbox Code Playgroud)
或这个:
level start end
1 1 3.60353 1112.62000
2 2 3.60353 20.35330
3 3 3.60353 8.77526 …Run Code Online (Sandbox Code Playgroud) 我正在寻找一些关于数据重组的建议.我正在使用Google Forms收集一些数据,我将其作为csv文件下载,如下所示:
# alpha beta option
# 6 8, 9, 10, 11 apple
# 9 6 pear
# 1 6 apple
# 3 8, 9 pear
# 3 6, 8 lime
# 3 1 apple
# 2, 4, 7, 11 9 lime
Run Code Online (Sandbox Code Playgroud)
数据有两个变量(alpha和beta),每个变量都列出数字.对于我的大多数数据,每个变量中只有一个数字.但是,对于某些观察,可以有两个,三个甚至十个数字.这是因为这些是使用谷歌表单中的"复选框"选项收集的回复,它允许对一个调查问题的多个答案.此外,对于一些潜在的解决方案来说,google表单在每个多个答案之前返回前导空格可能很重要.
在我的实际数据中,这只发生在所有观察的很小一部分中,上面是一个更简洁的例子.数据集中还有其他几个变量.在这里,我只包括一个包含因子的"选项".
我需要做的是在'alpha'或'beta'变量中复制包含多个数字的所有观察.重复行的数量应该等于alpha或beta变量中存在的数字的数量.然后,我需要将'alpha'或'beta'变量中的数字序列单独替换为每个数字.这将导致类似以下内容:
# alpha beta option
# 6 8 apple
# 6 9 apple
# 6 10 apple
# 6 11 apple
# 9 6 pear
# 1 6 apple
# 3 8 pear
# 3 9 …Run Code Online (Sandbox Code Playgroud) 用以下数据说,我对每个水果有多少独特合作伙伴的问题感兴趣?
我的df:
fruit1 fruit2
1 guava kiwi
2 lemon pear
3 pear apple
4 guava kiwi
5 pear guava
6 apple kiwi
7 banana lemon
8 lemon kiwi
9 apple banana
10 lemon guava
Run Code Online (Sandbox Code Playgroud)
我正试图掌握dplyr和tidyr.为此,我认为使用n_distinct()in dplyr 会很好.我做了以下事情:
rbind (df %>%select(fruita=fruit1,fruitb=fruit2),
df %>%select(fruita=fruit2,fruitb=fruit1)) %>%
group_by(fruita) %>%
summarise(Partners=n_distinct(fruitb)) %>%
arrange(desc(Partners))
Run Code Online (Sandbox Code Playgroud)
这基本上复制了下面的10行,但是在下半部分切换了水果的顺序.然后我计算新的第一列中的每个水果,它在新的第二列中使用了多少独特的伴侣水果n_distinct().
这工作得很好,但考虑到如何优雅dplyr和tidyr有,我想知道是否有这样做的更有效的方法,尤其是如果有执行的方式rbind,如使用此这些包的一个?
最终数据如下所示:
fruita Partners
1 lemon 4
2 apple 3
3 guava 3
4 pear 3
5 kiwi 3
6 banana …Run Code Online (Sandbox Code Playgroud) 我一直在努力了解如何strsplit更好地处理输出.我经常有这样的数据,我想分开:
mydata <- c("144/4/5", "154/2", "146/3/5", "142", "143/4", "DNB", "90")
#[1] "144/4/5" "154/2" "146/3/5" "142" "143/4" "DNB" "90"
Run Code Online (Sandbox Code Playgroud)
拆分后,结果如下:
strsplit(mydata, "/")
#[[1]]
#[1] "144" "4" "5"
#[[2]]
#[1] "154" "2"
#[[3]]
#[1] "146" "3" "5"
#[[4]]
#[1] "142"
#[[5]]
#[1] "143" "4"
#[[6]]
#[1] "DNB"
#[[7]]
#[1] "90"
Run Code Online (Sandbox Code Playgroud)
我从strsplit帮助指南中知道最终的空字符串不会产生.因此,根据要拆分的"/"数,我的每个结果中都会有1,2或3个元素
获得第一个元素非常简单:
sapply(strsplit(mydata, "/"), "[[", 1)
#[1] "144" "154" "146" "142" "143" "DNB" "90"
Run Code Online (Sandbox Code Playgroud)
但是我不知道如何获得第2,第3 ......当每个结果中存在这些不等数量的元素时.
sapply(strsplit(mydata, "/"), "[[", 2)
# Error in FUN(X[[4L]], ...) : subscript out of bounds …Run Code Online (Sandbox Code Playgroud) 我有一个关于控制ggvis中数据点的颜色的问题.
我有一个数据框,我正在以多种方式过滤(在一个闪亮的应用程序内,如果它很重要).这导致通常不通过存在于得到的滤波数据帧中来观察组I着色数据点.这显然导致出现在不同图中的不同颜色,这是令人困惑的.
这是一个非常接近的例子:
set.seed(101)
dfvis <- data.frame(x = runif(20), y = runif(20), mygroup = LETTERS[1:5])
dfvis
dfvis %>%
ggvis(x= ~x, y= ~y) %>%
layer_points(fill = ~factor(mygroup))
Run Code Online (Sandbox Code Playgroud)
让我们过滤一组 -
dfvis <- dfvis %>% filter(mygroup!="A")
dfvis %>%
ggvis(x= ~x, y= ~y) %>%
layer_points(fill = ~factor(mygroup))
Run Code Online (Sandbox Code Playgroud)

这里,"B"现在是蓝色,所有其他组在颜色顺序方面向上移动一个.
有没有办法,当在同一个df上做多个过滤器时,总是为每个因子/组的级别确保相同的颜色?
之前在ggplot中工作的一个技巧是在每个因子级别的数据帧末尾添加一个NA观测值.乍一看,这可以正常工作,因为颜色按照正确的顺序返回,但请注意左上角的流氓数据点!
dfvis1 <- rbind(dfvis, data.frame(x=NA, y=NA, mygroup="A"))
dfvis1 %>%
ggvis(x= ~x, y= ~y) %>%
layer_points(fill = ~factor(mygroup))
Run Code Online (Sandbox Code Playgroud)

所有帮助赞赏.
我打算在打印时进行换行.
这是我的代码:
temp <- LETTERS[1:11]
print(sprintf("Rank %s = %s \n", 1:11, temp))
Run Code Online (Sandbox Code Playgroud)
输出:
[1] "Rank 1 = A \n" "Rank 2 = B \n" "Rank 3 = C \n" "Rank 4 = D \n" "Rank 5 = E \n" "Rank 6 = F \n" "Rank 7 = G \n" "Rank 8 = H \n" "Rank 9 = I \n"
[10] "Rank 10 = J \n" "Rank 11 = K \n"
Run Code Online (Sandbox Code Playgroud)
我天真地认为这\n是一个突破.我想要的输出是:
"Rank 1 = A"
"Rank 2 = …Run Code Online (Sandbox Code Playgroud) 我希望找到最快的方法来找到1000个'n'整数的可能组合来找到目标整数.
例如.说我想要数字'20'.我想找到最多1000个四个整数的组合,它们总和到这个数字.整数可以重复.我还有一个条件,即整数不能小于特定的数字,在这种情况下为4.
target<-20 #the number I wish to sum to
lowest<-4 #the smallest integer I allow
size<-4 #the number of integers I wish to use to sum
maxposs <- target - ((size-1) * lowest) #given the lowest, this is the max possible integer. In my example it is 8.
Run Code Online (Sandbox Code Playgroud)
这就是我开始解决这个问题的方法.利用combn找到的四个选择整数的所有组合,然后由那些和为我的目标过滤.
m <- combn(rep(lowest:maxposs,size), size)
m1<- m[,colSums(m)==target]
Run Code Online (Sandbox Code Playgroud)
这里,'m1'有245列.只有这么多解决方案.最后几列:
# [,238] [,239] [,240] [,241] [,242] [,243] [,244] [,245]
#[1,] 4 4 4 4 4 4 5 5
#[2,] 5 5 …Run Code Online (Sandbox Code Playgroud) 假设我有这个数据框,它有两个 ID (1/2),它们的开始和结束时间在三个不同的区域 (A/B/C):
df <- structure(list(id = c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2), zone = c("A",
"B", "A", "C", "B", "A", "B", "A", "B", "C"), start = c(0, 6,
7, 8, 10, 0, 3, 5, 6, 7), end = c(6, 7, 8, 10, 11, 3, 5, 6, 7,
11)), row.names = c(NA, -10L), class = "data.frame")
df
id zone start end
1 1 A 0 6
2 1 B 6 7
3 1 A 7 …Run Code Online (Sandbox Code Playgroud) 我有一个数据框如下.最初只有两列/变量 - "Timestamp"(包含日期和时间)和"Actor".我将"时间戳"变量分解为"日期"和"时间",然后将"时间进一步分解为"小时"和"分钟".然后给出以下结构
dataf<-structure(list(hours = structure(c(3L, 4L, 4L, 3L, 3L, 3L, 6L,
6L, 6L, 6L, 6L, 2L, 2L, 2L, 2L, 5L, 5L, 5L, 1L, 1L, 2L, 2L), .Label = c("9",
"12", "14", "15", "16", "17"), class = "factor"), mins = structure(c(17L,
1L, 2L, 14L, 15L, 16L, 3L, 4L, 6L, 6L, 7L, 9L, 9L, 13L, 13L,
10L, 11L, 12L, 2L, 5L, 8L, 8L), .Label = c("00", "04", "08",
"09", "10", "12", "13", "18", "19", "20", "21", "22", "27", "39",
"51", "52", …Run Code Online (Sandbox Code Playgroud) 我想知道我是否遗漏了一些微不足道的东西:
在对包含NA的此类矢量进行排名时,有四种选择如何处理NA:
x<-c(5, NA, 3, NA, 6, 9, 10, NA, 5, 7, 12)
rank(x, na.last=T)
# [1] 2.5 9.0 1.0 10.0 4.0 6.0 7.0 11.0 2.5 5.0 8.0
rank(x, na.last=F)
# [1] 5.5 1.0 4.0 2.0 7.0 9.0 10.0 3.0 5.5 8.0 11.0
rank(x, na.last=NA)
# [1] 2.5 1.0 4.0 6.0 7.0 2.5 5.0 8.0
rank(x, na.last="keep")
# [1] 2.5 NA 1.0 NA 4.0 6.0 7.0 NA 2.5 5.0 8.0
Run Code Online (Sandbox Code Playgroud)
我希望保持和排名NAs.为了我的目的,他们应该平等和最后排名.在这种情况下ties.method,要使用的是默认的"平均值".我正在寻找这个结果:
# [1] 2.5 10.0 1.0 10.0 4.0 …Run Code Online (Sandbox Code Playgroud)