Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中转换数据帧_R - Fatal编程技术网

在R中转换数据帧

在R中转换数据帧,r,R,我们是否可以按照预期的输出转换这些数据 ColA ColB ColC A - 0 B X 3 C Y 4 D X 51 D Y 32 预期产量 ColA X Y A 0 0 B 3 0 C 0 4 D 51 32 可能是这样的: library(dplyr) library(tidyr) d

我们是否可以按照预期的输出转换这些数据

ColA   ColB  ColC
A        -    0
B        X    3
C        Y    4 
D        X    51
D        Y    32
预期产量

ColA     X    Y
A        0    0
B        3    0
C        0    4 
D        51   32

可能是这样的:

library(dplyr)
library(tidyr)

df %>%
  mutate_at(vars(ColB:ColC), ~replace(., . == '-', 'X')) %>%
  pivot_wider(names_from = ColB, values_from = ColC, values_fill = list(ColC = 0))

#  ColA  X     Y    
#  <fct> <chr> <chr>
#1 A     0     0    
#2 B     3     0    
#3 C     0     4    
#4 D     51    32   
库(dplyr)
图书馆(tidyr)
df%>%
在(变量(ColB:ColC),~replace(,.='-','X'))%>%
透视图(名称从=ColB,值从=ColC,值填充=list(ColC=0))
#可乐
#    
#1 A 0 0
#2B30
#3C04
#4 D 51 32
数据

df <- structure(list(ColA = structure(c(1L, 2L, 3L, 4L, 4L), .Label = c("A", 
"B", "C", "D"), class = "factor"), ColB = structure(c(1L, 2L, 
3L, 2L, 3L), .Label = c("-", "X", "Y"), class = "factor"), ColC = c(0L, 
3L, 4L, 51L, 32L)), class = "data.frame", row.names = c(NA, -5L))
df是的,我们可以。
使用
xtabs

res <- xtabs(ColC ~ ColA + ColB, dat)[,-1]
#     ColB
# ColA  X  Y
#    A  0  0
#    B  3  0
#    C  0  4
#    D 51 32

res基于
数据的简短解决方案。表
(如果您有大量数据,最推荐的选项)

colA=c(“A”、“B”、“c”、“D”、“D”)
colB=c(NA,“X”,“Y”,“X”,“Y”)
colC=c(0,3,4,51,32)
库(数据表)
dt
res <- as.data.frame(unclass(res))
res
#    X  Y
# A  0  0
# B  3  0
# C  0  4
# D 51 32
res <- as.data.frame(unclass(xtabs(ColC ~ ColA + ColB, dat)[,-1]))
dat <- structure(list(ColA = c("A", "B", "C", "D", "D"), ColB = c("-", 
"X", "Y", "X", "Y"), ColC = c(0L, 3L, 4L, 51L, 32L)), row.names = c(NA, 
-5L), class = "data.frame")