我的目标是实现以下目标,并且在这里很难找到其他谈论同一件事的帖子。 我的基本代码如下:
df = data.frame(cusip=c("A","B","C","D","A","C","Z","A","B"),
port=c("p1","p1","p1","p1","p2","p2","p2","p3","p3"))
...执行某些操作,并获得以下数据框: 行=列“端口”中的唯一值 column =仅一列显示(带有字符串)与第一列中指定的投资组合相关的所有唯一的cusip值。 因此,结果应如下所示:
df2 = data.frame(port=c("p1","p2","p3"),
cusip=c("A, B C, D", "A, C, Z", "A, B"))
我试图做类似的事情:
u = unstack(df1)
但是,这给了我一个列表,该列表的每个名称都对应一个唯一的投资组合ID,并且列表的每个元素都包含一个长度不确定的向量,且所有cusip值都与该投资组合相关联。 所以在这一点上我有点迷路了。 我阅读了此解决方案Converting a list of lists of strings to a data frame of numbers in R,该解决方案说明了如何将列表转换回数据框,但是由于与任何给定的投资组合相关的客户数量未知,因此对我没有太大帮助。 有什么建议?谢谢
答案 0 :(得分:3)
可以使用base R
来完成aggregate()
的解决方案:
#Code
aggregate(cusip~port,df,function(x) paste0(x,collapse = ', '))
输出:
port cusip
1 p1 A, B, C, D
2 p2 A, C, Z
3 p3 A, B
答案 1 :(得分:1)
具有def test_successfully_update_inventory(self):
data = {'product1': 500, 'product2': 200}
response = self.client.post(reverse('inventory:update-inventory'), data, format='json')
stream_handler = logging.StreamHandler(sys.stdout)
logger.addHandler(stream_handler)
logging.getLogger().info(response) # Prints The email can't be sent
和int main()
inFile.get(file);
while(inFile) {
inFile.get(file);
cout << file;
if(inFile.fail()) {
break;
}
if(inFile) {
++charNum;
}
if(inFile && c =='<') {
++comNum;
}
的解决方案是
dplyr
给出
stringr
答案 2 :(得分:1)
我们也可以使用toString
aggregate(cusip ~ port, df, toString)
或与data.table
library(data.table)
setDT(df)[, .(cusip = toString(cusip)), port]