我的 df 具有以下 colname:
colname(df) 给出:
"SUBJID" "EoT_A" "EoT_B" "EoT_C" "EoT_D" "PR_A" "PR_B" "PR_C" "PR_D"
"PD_A" "PD_B" "PD_C" "PD_D" "CR_A" "CR_B" "CR_C" "CR_D"
Run Code Online (Sandbox Code Playgroud)
我想重新排序 colname,例如:
"SUBJID"
"EoT_A" "PR_A" "PD_A" "CR_A"
"EoT_B" "PR_B" "PD_B" "CR_B"
"EoT_C" "PR_C" "PD_C" "CR_C"
"EoT_D" "PR_D" "PD_D" "CR_D"
Run Code Online (Sandbox Code Playgroud)
有没有一种聪明的方法可以实现这一目标?
让我们考虑这个简单的数据集
set.seed(12345)
df <- data.frame(a1 = rnorm(5), a2 = rnorm(5), a3 = rnorm(5),
b1 = rnorm(5), b2 = rnorm(5), b3 = rnorm(5),
c1 = rnorm(5), c2 = rnorm(5), c3 = rnorm(5))
Run Code Online (Sandbox Code Playgroud)
看起来像
a1 a2 a3 b1 b2 b3 c1 c2 c3
1 0.5855288 -1.8179560 -0.1162478 0.8168998 0.7796219 1.8050975 0.8118732 0.49118828 1.1285108
2 0.7094660 0.6300986 1.8173120 -0.8863575 1.4557851 -0.4816474 2.1968335 -0.32408658 -2.3803581
3 -0.1093033 -0.2761841 0.3706279 -0.3315776 -0.6443284 0.6203798 2.0491903 -1.66205024 -1.0602656
4 -0.4534972 -0.2841597 0.5202165 1.1207127 -1.5531374 0.6121235 1.6324456 1.76773385 …Run Code Online (Sandbox Code Playgroud) 我想从现有的数据框中生成一个新的数据框,其中根据该变量是否在单独的向量中列出(即作为行)来选择该新 df 中的列。因此,新的 df 将仅包含向量中列出的那些列。为了提高效率,我想这样做而不必手动指示这些列。
我的直觉是,这是一个非常简单的操作,但对于 R 来说,我不太确定如何解决这个问题。
我有一个类似的数据框mtcars,以及一个列名称的字符串向量c("mpg", "cyl", "disp", "hp", "drat"),我希望将所有列加在一起成为一个新的列.
我通常会使用类似的东西
mtcars %>% transmute(new_col = mpg + cyl + disp + hp + drat)
new_col
1 300.90
2 300.90
3 231.65
4 398.48
5 564.85
6 356.86
7 630.51
Run Code Online (Sandbox Code Playgroud)
但是,如果您有一个存储在向量中的100个列名,这将变得非常繁琐.
所以我的问题是,有没有一种方法可以将许多列汇总在一起,列名称保存在字符串向量中?
到目前为止我所知道的...
1)当使用包含数字、空格或其他符号的非语法变量/列名称创建小标题时,使用反引号(因为通常只能用字母命名列,对吗?)
tb <- tibble(
': ) ' = "smile, ' ' = "space",
'2000' = "number", "double_quotes" = "normal_text")
Run Code Online (Sandbox Code Playgroud)
但是,当我在这里使用双引号时,小标题仍然由非语法符号/数字组成。
2) 使用双括号时,双引号用于对列名称进行子集化。
tb[["double_quotes"]]
Run Code Online (Sandbox Code Playgroud)
在这里,当我使用单引号进行子集化时,它仍然有效。
3)当使用 $ 进行子集化时,要选择非语法名称,我必须使用单引号,但在这里,如果我使用双引号进行子集化,它也可以工作
同样,tb$": )"效果也一样好tb$': )'
那么它们实际上可以互换吗?
有趣的是,当我绘制图表时
annoying <- tibble(
`1` = 1:10,
`2` = `1` * 2 + rnorm(length(`1`))
)
ggplot(annoying, aes(x = `1`, y = `2`)) +
geom_point()
Run Code Online (Sandbox Code Playgroud)
引用非语法变量时必须使用单引号,否则看起来 ggplot 将 X 和 Y 分别视为 1 和 2 的单点。还有其他类似的案例吗?
我正在尝试在 R 中转换我的数据,但我无法获得我想要的列。
我的数据集如下,我想得到的列是“total”,它是D1+D2+D3+D4+D5的总和,忽略“NA”。
| NR | D1 | D2 | D3 | D4 | D5 | 全部的 |
|---|---|---|---|---|---|---|
| 一种 | 1 | 不适用 | 不适用 | 1 | 不适用 | 2 |
| 乙 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 |
| C | 不适用 | 1 | 不适用 | 不适用 | 不适用 | 1 |
这可能是一个相当愚蠢的问题,但我无法理解。
我已经尝试过:
total <- NA
total <- ifelse(D1==1, 1, total)
total <- ifelse(D2==1, total + 1, total)
total <- ifelse(D3==1, total + 1, total)
total <- ifelse(D4==1, total + 1, total)
total <- ifelse(D5==1, total + 1, total)
Run Code Online (Sandbox Code Playgroud)
但它将我所有的行返回到“NA”
我试过:
total <- mutate(dataset, total=D1+D2+D3+D4+D5)
Run Code Online (Sandbox Code Playgroud)
但是我没有得到 D1 到 D5 …
我在学习操作系统时遇到这个问题,我真的很感兴趣操作系统如何检测数组索引是否超出范围并因此产生分段错误?
int main(){
char* ptr0;
ptr0[0] = 1;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码绝对会产生分段错误,因为 ptr0 没有分配任何内存。
但如果添加一行,情况就会改变。
int main(){
char* ptr0;
char* ptr1 = ptr0;
ptr0[0] = 1;
}
Run Code Online (Sandbox Code Playgroud)
这段代码不会导致任何错误,即使你将ptr0[0]更改为ptr0[1000],它仍然不会导致任何分段错误。
不知道为什么这条线有这么大的力量
char* ptr1 = ptr0
Run Code Online (Sandbox Code Playgroud)
我试图反汇编这些代码,但发现的信息很少。
有人可以从内存分配的角度向我解释一下吗?多谢。
我正在尝试使用 C++ 来理解记忆化,并且我正在尝试用“golom 序列”做一个例子
int main(int argc, char* argv[])
{
std::unordered_map<int, int> hashTable;
int value = 7;
auto start = std::chrono::high_resolution_clock::now();
std::cout << golomS(4, hashTable) << std::endl;
auto stop = std::chrono::high_resolution_clock::now();
auto start1 = std::chrono::high_resolution_clock::now();
std::cout << golom(4) << std::endl;;
auto stop1 = std::chrono::high_resolution_clock::now();
auto duration = std::chrono::duration_cast<std::chrono::microseconds>(stop - start);
auto duration1 = std::chrono::duration_cast<std::chrono::microseconds>(stop1 - start1);
std::cout << "Time taken by function 1: "
<< duration.count() << " microseconds" << std::endl;
std::cout << "Time taken by function 2: "
<< …Run Code Online (Sandbox Code Playgroud) 如何将字符串列表转换a为列表b列表
a = list('A', 'B', 'C')
Run Code Online (Sandbox Code Playgroud)
并转换为
b = list(list('A'), list('B'), list('C'))
Run Code Online (Sandbox Code Playgroud)