小编Cro*_*dek的帖子

使用`by`过滤data.table中的行

我想按照以下标准筛选组.将DT带来意想不到的效果.

输入数据

library(data.table)
library(dplyr)

dt <- data.table(
    logic = c(TRUE, TRUE, FALSE, TRUE, TRUE, TRUE),
    group = c("A" , "A",  "A"  , "B" , "B" , "B")
)
Run Code Online (Sandbox Code Playgroud)

我想过滤logic字段值的组all TRUE.

预期行为(由dplyr)

正如您所看到的dplyr那样,按预期工作,并且只返回值group = B

dt %>% 
  group_by(group) %>% 
  filter(all(logic))
# Source: local data table [3 x 2]
# Groups: group

#   logic group
# 1  TRUE     B
# 2  TRUE     B
# 3  TRUE     B
Run Code Online (Sandbox Code Playgroud)

出乎意料的行为 data.table

DT 并不真正过滤行,无论是带来所有表还是没有. …

r data.table

6
推荐指数
2
解决办法
1927
查看次数

使用 groupby 就地转换熊猫

是否可以使用语句就地改变 DataFrame groupby

import pandas as pd
dt = pd.DataFrame({
                   "LETTER": ["a", "b", "c", "a", "b"],
                   "VALUE" : [10 , 12 , 13,  0,  15]
                   })
def __add_new_col(dt_):
    dt_['NEW_COL'] = dt_['VALUE'] - dt_['VALUE'].mean()
    return dt_
pass


dt.groupby("LETTER").apply(__add_new_col)
  LETTER  VALUE  NEW_COL
0      a     10      5.0
1      b     12     -1.5
2      c     13      0.0
3      a      0     -5.0
4      b     15      1.5


dt
  LETTER  VALUE
0      a     10
1      b     12
2      c     13
3      a      0
4      b …
Run Code Online (Sandbox Code Playgroud)

python in-place pandas

5
推荐指数
1
解决办法
7144
查看次数

remove_if字符串中的最后一个字符

我想删除引用字符串传递的第一个和最后一个括号.不幸的是,我有条件地删除第一个和最后一个元素.我无法理解为什么remove_if不能像迭代器那样工作.

演示

#include <iostream>
#include <algorithm>
using namespace std;

void print_wo_brackets(string& str){
    auto detect_bracket = [](char x){ return(')' == x || '(' == x);};
    if (!str.empty()) 
    {
        str.erase(std::remove_if(str.begin(), str.begin() + 1, detect_bracket));
    }
    if (!str.empty()) 
    {
        str.erase(std::remove_if(str.end()-1, str.end(), detect_bracket));
    }
}

int main()
{
    string str = "abc)";
    cout << str << endl;
    print_wo_brackets(str);
    cout << str << endl;


    string str2 = "(abc";
    cout << str2 << endl;
    print_wo_brackets(str2);
    cout << str2 << endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

产量 …

c++ string algorithm stl c++11

4
推荐指数
1
解决办法
764
查看次数

如何从std :: map :: emplace()获取对插入对象的引用?

如何从中获取对插入对象的引用std::map::emplace()emplace的官方文档。我已经添加了auto inserted = m.emplace("d", "ddd");

您能演示一下如何获得对刚刚插入内容的引用"ddd"吗?

我收到一些可笑的类型struct std::_Rb_tree_iterator,找不到任何文档或示例,说明如何使用它。

#include <iostream>
#include <utility>
#include <string>

#include <map>
int main()
{
    std::map<std::string, std::string> m;

    // uses pair's template constructor
    auto inserted = m.emplace("d", "ddd");

    for (const auto &p : m) {
        std::cout << p.first << " => " << p.second << '\n';
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ stdmap c++11

3
推荐指数
1
解决办法
525
查看次数

for_each使用vector <bool>的lambda进行修改

当我尝试使用for_each更改向量时:

vector<bool> sub_accs_ind(vec_ids_.size());
std::for_each(sub_accs_ind.begin(), sub_accs_ind.end(), [](bool& b){ b = false; });
Run Code Online (Sandbox Code Playgroud)

它会导致错误 /usr/include/c++/4.8/bits/stl_algo.h:4417:14: error: no match for call to ‘(main(int, char* const*)::__lambda3) (std::_Bit_iterator::reference)’ __f(*__first);

你能指导我这里有什么问题吗?

c++ lambda c++11

1
推荐指数
1
解决办法
313
查看次数

标签 统计

c++ ×3

c++11 ×3

algorithm ×1

data.table ×1

in-place ×1

lambda ×1

pandas ×1

python ×1

r ×1

stdmap ×1

stl ×1

string ×1