我已经看过一些关于从阵列或列表中复制部件的问题,但我仍然不了解它背后的逻辑......对我来说,通过调用我可以得到每个值是没有意义的它们是索引,但是也不可能通过索引来调用列表的一部分......
df$group <- rep(a:b, n) # where a:b represents how many observations you have for each unique id and n is how many unique ids are in the dataset // this would be rep(1:4, 2) in your example
temp1 <- aggregate(df, list(group), FUN=mean) # aggregate to get mean
temp2 <- aggregate(df, list(group), FUN=sd) # aggregate to get sd
out <- data.frame(unique(df$email))
out <- merge(out, temp1, by.x="email", by.y="email")
out <- merge(out, temp2, by.x="email", by.y="email")
我在最后一行中期待的是该命令返回索引为2,3和4的值!
x=[0,1,2,3,4,5]
>>>x[2]
2
>>>x[4]
4
>>>x[2:4]
[2,3]
是否有一个命令以我认为的方式完成它?
答案 0 :(得分:2)
您遗漏x[2:4]
获取索引为2 <= index < 4
的所有值。因此,您获得索引2
和3
,但不是4
。这样做是为了你总是可以通过减去下限的上限来告诉部分列表的大小(不仅在python中,而且在一般的计算中)。 4 - 2 = 2,因此列表中有两个项目。
E.W. Dijkstra写了一篇有趣的文章,如果你愿意阅读它here。
答案 1 :(得分:0)
您正在执行的操作:
x[2:4]
称为slicing operation
。它的格式是,对于list[x:y]
,您可以获得范围x
到y-1
的索引值。即,list[x]...list[y-1]
因此,当您执行x [2:4]时,您将从
获取值x[2]...x[4-1] => x[2]...x[3]
因此你有:
>>> x = [0,1,2,3,4,5]
>>> x[2:4]
=> [2, 3]
#should be
>>> x[2:5]
=> [2, 3, 4]
一些阅读参考文献:
答案 2 :(得分:0)
你可以做到
x[2:5]
因为编写x[a:b]
从索引a
开始,而不包括索引b
因此,在您的情况下,您需要x[a:b+1]