我有一个变量v如下:
> head(v)
C1 C2 C3 C4 C5 C6 C7 C8 C9 C10
1 0.m2 0.m2 0.m2 0.m2 0.m2 0.m2 0.m2 0.m2 0.m2 0.m2
2 0.m1 0.m1 0.m1 0.m1 0.m1 0.m1 0.m1 0.m1 0.m1 0.m1
3 0.p1 0.p1 0.p1 0.p1 0.p1 0.p1 0.p1 0.p1 0.p1 0.p1
4 0.m1 0.m1 0.m1 0.m1 0.m1 0.m1 0.m1 0.m1 0.m1 0.m1
5 0.m2 0.m2 0.m2 0.m2 0.m2 0.m2 0.m2 0.m2 0.m2 0.m2
6 0.m2 0.m2 0.m2 0.m2 0.m2 0.m2 0.m2 0.m2 0.m2 0.m2
Run Code Online (Sandbox Code Playgroud)
我想利用数据帧的每个元素的尾随“.m1”。
当我执行 lapply 时,它会给我一个 C1、C2 的列表,...
> lapply(v, function(x) as.numeric(gsub("\\..*", "", x))) %>% str
List of 10
$ C1 : num [1:40000] 0 0 0 0 0 0 0 0 0 0 ...
$ C2 : num [1:40000] 0 0 0 0 0 0 0 0 0 0 ...
$ C3 : num [1:40000] 0 0 0 0 0 0 0 0 0 0 ...
$ C4 : num [1:40000] 0 0 0 0 0 0 0 0 0 0 ...
$ C5 : num [1:40000] 0 0 0 0 0 0 0 0 0 0 ...
$ C6 : num [1:40000] 0 0 0 0 0 0 0 0 0 0 ...
$ C7 : num [1:40000] 0 0 0 0 0 0 0 0 0 0 ...
$ C8 : num [1:40000] 0 0 0 0 0 0 0 0 0 0 ...
$ C9 : num [1:40000] 0 0 0 0 0 0 0 0 0 0 ...
$ C10: num [1:40000] 0 0 0 0 0 0 0 0 0 0 ...
Run Code Online (Sandbox Code Playgroud)
但是,我想要一个尺寸保持不变的数据框,所以我执行以下操作并且它有效
> v[]=lapply(v, function(x) as.numeric(gsub("\\..*", "", x)))
> head(v)
C1 C2 C3 C4 C5 C6 C7 C8 C9 C10
1 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 0
5 0 0 0 0 0 0 0 0 0 0
6 0 0 0 0 0 0 0 0 0 0
Run Code Online (Sandbox Code Playgroud)
是否需要 [] 来改变 v 的每个元素?有更好的方法来编码吗?谢谢。
v是 a data.frame,它本质上(但不完美)是 a ,list其中所有元素都被命名且长度相同。lapply总是返回一个list. 时期。它不关心它的输入来自 a frame,这不是它的意图。v = lapply(..)替换用新对象命名的对象引用"v",即(如上所述) a list。然而 ...v[] = lapply(..)将 的内容替换为 from的v返回值,lapply(..)而不更改 的类和属性v,因此它仍然是一个包含 的返回列表内容的框架lapply。意识到使用 也可以达到同样的效果v = data.frame(lapply(..))。| 归档时间: |
|
| 查看次数: |
76 次 |
| 最近记录: |